Gee*_*eek 15 linux shell shell-script
我有以下脚本可以正常工作:
!/bin/bash
a=12
while [ $a -gt 10 ]
do
echo "$a"
a=$(($a-1))
done
echo "done"
Run Code Online (Sandbox Code Playgroud)
如果我在“do”上方添加“echo something”行,我希望在该行中看到语法错误。好像[ $a -gt 10 ]绕过了,就变成无限循环了。怎么会这样?
mur*_*uru 29
从bash 手册:
while
while命令的语法是:而测试命令;执行后续命令; 完毕执行consequent-commands只要test-commands具有零退出状态。返回状态是在 中执行的最后一个命令的退出状态,consequent-commands如果没有执行则为零。
注:test-commands,复数。您可以在测试中使用多个命令,因此这是一个完全有效的循环,使用命令列表[ $a -gt 10 ]; echo "$a"作为测试:
while [ $a -gt 10 ]
echo "$a"
do
a=$(($a-1))
done
Run Code Online (Sandbox Code Playgroud)
虽然命令[ $a -gt 10 ]可能会失败,也可能不会失败,但echo将(几乎)总是成功(除非它无法写入文本,或者发生了其他一些错误),因此测试命令的最终退出状态将始终为成功,并且循环将始终运行。
ImH*_*ere 10
来自man bash:
而列表-1; 做列表-2;完成
该命令的同时连续执行列表中list-2
,只要最后一个命令列表list-1
返回零退出状态。
这意味着 alist可以包含多个命令,它确实这样做了(主要由分号或换行符分隔)。
所以,这非常有效:
#!/bin/bash
a=12
while
echo something
echo "a before test = $a"
[ a -gt 10 ]
do
echo "a after test = $a"
a=$(($a-1))
done
echo "done"
Run Code Online (Sandbox Code Playgroud)
如果dois echo之前的最后一个命令do 接收的退出代码始终为真 (0) 并且循环变为无限。
| 归档时间: |
|
| 查看次数: |
1924 次 |
| 最近记录: |