如果[$(... | wc -l)= false)触发,无论输出如何

时间:2019-03-04 15:47:41

标签: bash shell

我的bash脚本如下所示。我想检查git中是否存在存储库,如果不存在,则再运行一些其他命令。

if [ `git ls-remote --heads $REPOSITORY_PATH $BRANCH | wc -l` = false ]
then
  # Do something if it doesn't exist...
fi

但是我遇到的问题是,无论if中的语句返回0还是1,它似乎总是将语句评估为true。我在这里想念什么吗?如果它返回0,我希望它运行;如果它返回1,我希望它不运行。

1 个答案:

答案 0 :(得分:2)

bash没有布尔数据类型; false只是一个普通的字符串,并且您的管道正在输出文字字符串0(根据您的实现,可能会有一些空格填充,而不是布尔值。

您需要进行显式的数值比较:

if [ "$(git ls-remote --heads "$REPOSITORY_PATH" "$BRANCH" | wc -l)" -eq 0 ]; then

(或-ne,如果希望在输出 时执行此命令)。