k.C*_*org 6 shell bash shell-script cat
cat > /path/to/file << EOF
当我在 bash 脚本中将多行打印到文件中时,我习惯使用...我正在检查我公司的旧代码,我发现了cat EOT
指令而不是cat EOF
我习惯的指令(请注意T而不是末尾的F ),好奇心抓住了我。
我进行了快速研究,只发现了另一个问题,但我认为它与我想知道的内容无关。
我用以下代码做了一些测试:
password=hello
cat > ./hello.txt << EOT
authentication {
auth_type PASS
auth_pass $password
}
EOT
Run Code Online (Sandbox Code Playgroud)
EOF
我得到的输出与我使用代替时完全相同EOT
。正如预期的那样,输出是:
root@test_VM:~# bash test.sh && cat hello.txt
authentication {
auth_type PASS
auth_pass hello
}
Run Code Online (Sandbox Code Playgroud)
所以问题是:
EOT
和的使用有什么区别EOF
?ilk*_*chu 25
这两个字符串或任何其他字符串没有区别,也没有特殊含义。它只是一个任意终止符,您几乎可以使用任何您喜欢的字符串。
当然,数据本身不能包含该特定行,因此,如果您的数据包含例如具有另一个此处文档的 shell 脚本,则需要在两者中使用不同的终止符。使用某种描述性的字符串可能对脚本的任何未来读者都有用。
例如
cat > test.sh <<END_OF_SCRIPT
cat <<EOF
hello
EOF
END_OF_SCRIPT
Run Code Online (Sandbox Code Playgroud)
test.sh
当通过 shell 执行时会生成which 打印hello
。
但是,如果您在启动此处文档的行中引用终止符,则会存在差异,但它会阻止此处文档数据的扩展。这将打印$i
,而不是变量的值:
cat << 'EOF'
$i
EOF
Run Code Online (Sandbox Code Playgroud)
也可以看看: