Bash脚本执行无输出且陷入死循环,求问题原因及解决方法
问题分析与修复方案
你的脚本存在几个关键错误,导致出现无限运行且无输出的问题:
1. 使用了中文引号
脚本里的 “$@“ 是中文双引号,Bash无法正确解析,会把所有参数当成一个异常的整体字符串,引发解析错误。必须替换为英文双引号:
for x in "$@"
2. if条件判断语法完全错误
Bash的条件判断有严格语法规则:
- 变量必须加
$符号引用,即$x而非x - 数值相等判断要用
-eq,字符串相等用==,且运算符两边必须留空格 - 条件必须包裹在
[ ]或[[ ]]中
原脚本的if x = 0; 完全不符合语法,正确写法示例:
if [ $x -eq 0 ]; then echo "False" elif [ $x -eq 1 ]; then echo "True" fi
或者更现代的[[ ]]写法:
if [[ $x == 0 ]]; then echo "False" elif [[ $x == 1 ]]; then echo "True" fi
3. TextEdit的格式陷阱
TextEdit默认会自动替换引号为智能弯引号(类似中文引号),保存脚本时一定要切换到纯文本模式(菜单栏→格式→制作纯文本),避免这类隐形格式错误。
修复后的完整脚本
for x in "$@" do if [ $x -eq 0 ]; then echo "False" elif [ $x -eq 1 ]; then echo "True" fi done
运行修复后的脚本,输入sh TestBash.sh 0 1 0 1就能得到预期输出:
False True False True
内容的提问来源于stack exchange,提问作者Anna Jacobsen
相关产品推荐
相关产品推荐

