对于以下 shell 脚本 -
#!/bin/sh
main_version=0
feature_version=0
patch_version=0
if [[ $1 -eq "m" ]]; then
main_version=$((main_version+1))
fi
if [[ $1 -eq "f" ]]; then
feature_version=$((feature_version+1))
fi
if [[ $1 -eq "p" ]]; then
patch_version=$((patch_version+1))
fi
echo $main_version
echo $feature_version
echo $patch_version
m
尽管我使用以下方法传递参数,但它仍在增加所有变量./<script-name>.sh m
这是什么原因呢?
答案1
-eq
使用算术比较。Sh 算术运算将非数字操作数视为 0,因此您只需检查[[ 0 -eq 0 ]]
所有三种情况。
对于字符串比较,您需要这样做[ "x" = "y" ]
。(这是 POSIX shell 语法。)
Bash 语法是[[ x == y ]]
使用双 =,但它是不是一个好主意在脚本头声明 /bin/sh 时使用 bashisms/kshisms。要么更改头以要求 Bash,要么仅坚持使用 POSIX shell 语法。