Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个shell脚本输出如此奇怪_Shell - Fatal编程技术网

为什么这个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