首页 > 解决方案 > 值对于基础来说太大了(比较 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 脚本中比较它的最佳方法。

标签: bashgitshell

解决方案


-eq测试是针对数字相等的,它需要十进制数字。这些输入是十六进制字符串。不是测试数字相等性,而是测试字符串相等性:不存在一个用户将一个数字编码为,比如说,00a3另一个a3编码来自单个“用户”(Git 提交哈希系统)的风险。

请注意,您可以对这些使用更普遍适用的(非 bash 特定的)[POSIX 测试:

if [ -z "LAST_COMMIT" -o "$LAST_COMMIT" = "$GIT_COMMIT" ]; then
    ...

它适用于 bash普通的 old sh


推荐阅读