bash - 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
我希望它不运行。
解决方案
bash
没有布尔数据类型;false
只是一个普通的字符串,并且您的管道正在输出一个文字字符串0
(可能带有一些空白填充,具体取决于您的实现,而不是布尔值。
您需要进行显式数字比较:
if [ "$(git ls-remote --heads "$REPOSITORY_PATH" "$BRANCH" | wc -l)" -eq 0 ]; then
(或者-ne
,如果您希望在有输出时执行此操作)。
推荐阅读
- c# - 不包含“HasDefaultValue”的定义
- jsp - 如何在 OpenAM 中获取标头属性?
- python - 如何使用 Python(不使用 PySpark)将 pandas 数据框插入到现有的 Hive 外部表中?
- javascript - 根据 csv 文件中的 x 轴值绘制 Y 轴数据:Highcharts
- html - 如何在dataview中制作水平滚动条
- c# - 通过代理使用 KeyVaultClient
- vb.net - 在 rdlc 报告中将数字转换为 Word
- apache - Webpack/Apache - 浏览时看不到“dist”文件夹
- java - 使用 java 套接字通过网络发送屏幕截图图像
- php - PHP 文件上传 move_uploaded_file