首页 > 解决方案 > if [ $(... | wc -l) = false ] 无论输出如何都会触发

问题描述

我的 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似乎总是将该语句评估为真。我在这里缺少什么吗?如果它返回0,我希望它运行,如果它返回,1我希望它不运行。

标签: bashshell

解决方案


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

您需要进行显式数字比较:

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

(或者-ne,如果您希望在有输出时执行此操作)。


推荐阅读