如何在bash中观看for循环?

Sto*_*row 0 bash watch for

是否可以forwatch命令中使用-loop ?

我不太确定我尝试过的这个错误是怎么回事:

$ for i in 1 2 3; do echo $i; done
1
2
3
$ watch -n 10 for i in 1 2 3; do echo $i; done
-bash: syntax error near unexpected token `do'
$ watch for i in 1 2 3; do echo $i; done
-bash: syntax error near unexpected token `do'
$
Run Code Online (Sandbox Code Playgroud)

cas*_*cas 6

watch命令参数是一个使用sh -c.

如果命令参数只是一个由空格分隔的标记列表(例如watch ls -l),它会将它们全部连接起来并运行它们。但是不带引号的shell元字符由运行外壳采用watch不会被看到watch

这意味着; & | < >需要对诸如etc 之类的元字符进行转义或引用,以防止您在其中运行的 shellwatch将这些字符视为例​​如标记watch命令结束、在后台运行 watch 命令或管道输出的指令的watch到另一个程序(而不是运行脚本表内管)。

通常的引用规则适用 - 单引号防止变量插值,否则双引号。 man watch最后有一个示例部分显示了这一点。

例如:

watch -n 10 'for i in 1 2 3; do echo $i; done'
Run Code Online (Sandbox Code Playgroud)

或者

watch -n 10 'grep something /var/log/kern.log | tail'
Run Code Online (Sandbox Code Playgroud)

注意:您可以使用watch-x,如果你想要的东西的exec没有选项sh -c。例如watch -x awk -f script.awk