有什么方法可以同时使用 while 循环和 grep 吗?看我的例子:
while [[ !(grep -R -h "${text}" ${path}) ]];
do
...
done
它说:
./test_script.sh: line 1: conditional binary operator expected
./test_script.sh: line 1: expected `)'
./test_script.sh: line 1: syntax error near `-R'
./test_script.sh: line 1: `while [[ !(grep -R -h "${text}" ${path}) ]];'
答案1
不要将命令放在方括号内。要在
grep
成功时循环(即,直到失败),只需执行以下操作while grep ... do ︙ done
要在
grep
失败时循环(即,直到成功),请执行while ! grep ... do ︙ done
!
和命令之间有空格(即一个或多个空格和/或制表符) 。您应该始终引用您的 shell 变量引用(例如,
"$path"
),除非您有充分的理由不这样做,并且您确定您知道自己在做什么。相比之下,虽然牙套很重要, 它们不像引号那么重要,所以"$text"
和就足够了(在这种情况下"$path"
您不需要使用"${text}"
和,)。"${path}"
…除非
path
可能被设置为列表文件名,在这种情况下,请参阅 忘记在 bash/POSIX shell 中引用变量的安全隐患 — 但是如果……怎么办?;
行尾不需要分号 ( )while
(除非您在do
其后添加分号)。换句话说,while
line 和 thedo
必须用分号分隔和/或一个或多个换行符。