为什么这个shell脚本输出如此​​奇怪

时间:2017-04-06 10:48:39

标签: shell

#!/bin/bash
echo "===========3333333====="

if [ $0 == "test" ] || $0 == "all" ];then
    echo "---"
fi

无限循环输出:

===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====
===========3333333=====

虽然我知道错误的是缺少方括号       如果[$ 0 ==“test”] || [$ 0 ==“all”];然后 但为什么输出那样???

2 个答案:

答案 0 :(得分:4)

考虑行if cmd1 || cmd2

格式为[ $0 == "test ],其中cmd1为$0 == "all" ] 和cmd2是==

第二个命令正在调用带有参数all][的脚本。所以你有一个递归。

请记住,] 不是 shell语法的一部分。它只是一个具有奇怪特征的命令,要求其最后一个参数为pip install -U Celery

答案 1 :(得分:1)

$0 == "all" ];then

本节开始递归。因为$ 0再次启动脚本。

例如下面的代码产生相同的结果

#!/bin/bash
echo "===========3333333====="
$0 bash is not checking below!!!!!!!!!!
        echo "ok"
fi