bash - 值对于基础来说太大了(比较 git 提交时的错误标记
问题描述
我编写了简单的脚本来比较 bash 中的提交值。我在哪里出错。
export GIT_COMMIT=66597933406267ccb159c455b852480698b2c892
export LAST_COMMIT=66597933406267ccb159c455b852480698b2c892
if [[ -z "$LAST_COMMIT" || "$LAST_COMMIT" -eq "$GIT_COMMIT" ]]; then
echo LAST_COMMIT='HEAD~1' > ~/Desktop/build.properties
fi
commit.sh:第 3 行:[[: 66597933406267ccb159c455b852480698b2c892:值对于基数太大(错误标记为“66597933406267ccb159c455b852480698b2c892”)
两个变量值都是动态的。用于测试目的,手动分配。
我可以知道可能是什么问题以及在 shell 脚本中比较它的最佳方法。
解决方案
该-eq
测试是针对数字相等的,它需要十进制数字。这些输入是十六进制字符串。不是测试数字相等性,而是测试字符串相等性:不存在一个用户将一个数字编码为,比如说,00a3
另一个a3
编码来自单个“用户”(Git 提交哈希系统)的风险。
请注意,您可以对这些使用更普遍适用的(非 bash 特定的)[
POSIX 测试:
if [ -z "LAST_COMMIT" -o "$LAST_COMMIT" = "$GIT_COMMIT" ]; then
...
它适用于 bash和普通的 old sh
。
推荐阅读
- google-apps-script - 谷歌脚本根据另一个包含公式的单元格更改单元格值
- mongodb - 属性参考 SpringBoot MongoDB 中未发现异常
- swiftui - iOS 15 上 SwiftUI 中的意外列表行为
- c# - 无法理解 C# 中的调用函数
- aws-sdk - aws ses如何检查电子邮件是否已通过验证以发送电子邮件
- python - 如何在 sympy 中获得重复的根源?
- java - 无法在 Java 中的 for-loop 和 if-else 语句中更改变量的值
- powerbi - “当交叉过滤方向设置为双向时,它可以在强制执行行级安全 (RLS) 规则时应用双向过滤”的示例
- vb6 - 我怎样才能一次又一次地发送时间 12am vb6
- c - 一段时间后向子进程发送信号