为什么这个shell脚本输出如此奇怪
无限循环输出:为什么这个shell脚本输出如此奇怪,shell,Shell,无限循环输出: #!/bin/bash echo "===========3333333=====" if [ $0 == "test" ] || $0 == "all" ];then echo "---" fi 虽然我知道错的是缺少方括号 如果[$0==“测试”]| |[$0==“全部”];然后 但是为什么要这样输出呢?如果[$0==“test”]| |$0==“all”] 如果cmd1 | | cmd2,则其形式为,其中cmd1为[$0==“测试] cmd2是$0==“所有”]
#!/bin/bash
echo "===========3333333====="
if [ $0 == "test" ] || $0 == "all" ];then
echo "---"
fi
虽然我知道错的是缺少方括号
如果[$0==“测试”]| |[$0==“全部”];然后
但是为什么要这样输出呢?如果[$0==“test”]| |$0==“all”] 如果cmd1 | | cmd2,则其形式为
,其中cmd1为[$0==“测试]
cmd2是$0==“所有”]
第二个命令使用参数==
、all
和]
调用脚本。因此,您得到了一个递归
记住,[
不是shell语法的一部分。它只是一个命令,具有奇怪的特性,要求它的最后一个参数是]
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
此节正在启动递归。因为$0再次启动脚本
例如,下面的代码产生相同的结果
$0 == "all" ];then
虽然这是有意义的,但我仍然不确定,是哪个词启动了递归?您想解释更多吗?有一些有趣的事情需要注意。具体来说,脚本在作为/test.sh
调用时递归,但在作为bash test.sh
调用时不会递归,因为这会产生不同的$0。@Inian$0
是脚本的名称因此$0
调用脚本并导致递归。还要注意,字符串比较运算符是=
(=
是一种需要避免的不可移植的bashism)。
#!/bin/bash
echo "===========3333333====="
$0 bash is not checking below!!!!!!!!!!
echo "ok"
fi