;
在这样的单行脚本中意味着什么:
while true; do sudo -n true; sleep 60; kill -0 '$$' || exit; done 2>/dev/null &
这是否意味着换行或“下一个命令”?
答案1
它是命令的分隔符。尽管在第一种情况下,最好将其视为声明的结束while
。
例如,如果您想在某个命令返回成功时执行循环,您可以执行类似的操作
while test -f /foo; do some_command; done`
分号用于指示 的参数结束test
。否则它会认为这do
是另一个论点test
。
但是,您可以使用换行符代替分号。以下内容与上面的示例完全相同,只是没有任何分号
while test -f /foo
do
some_command
done
事实上,对于 bash,如果您运行上面的命令,然后在它完成后(或者您 CTRL+C),如果您返回历史记录(向上箭头键或其他键),您会注意到它替换了多行命令与一个使用分号代替。
if
所以是的,像and之类的语法while
会破坏正常的 shell 行为。
我个人一直认为语法很奇怪,因为看起来do
很奇怪。但你会习惯的。