如何在 csh shell 命令提示符下使用 while 循环?

dcd*_*cds 3 linux csh

我试图csh在 RHEL 7.2 的 shell 命令提示符中使用 while 循环,但出现以下错误:

$ while true
while: Expression Syntax.
Run Code Online (Sandbox Code Playgroud)

bashshell 中也是如此。

Sté*_*las 6

whileloops in的语法与cshBourne-like shell的语法不同。它的:

while (arithmetic-expression)
  body
end
Run Code Online (Sandbox Code Playgroud)

什么时候csh是交互式的,出于某种原因,它end必须单独出现在一行上。

对于用于测试命令成功的算术表达式,您需要{ cmd }(需要空格)。{ cmd }如果命令成功(以 0 退出状态退出)或 0(如果命令以非零退出状态退出),则算术表达式中的 in 解析为 1。

所以:

while ({ true })
  body
end
Run Code Online (Sandbox Code Playgroud)

但这有点愚蠢,尤其是考虑到true它不是csh. 对于无限循环,您宁愿使用:

while (1)
  body
end
Run Code Online (Sandbox Code Playgroud)

相比之下,在 POSIX shell 中,语法是:

while cmd; do
  body
done
Run Code Online (Sandbox Code Playgroud)

如果您希望条件计算算术表达式,则需要运行一个命令来计算它们,例如expr, 或ksh's let/((...))test/[命令与$((...))算术扩展相结合。