如何在 if/else 语句中将变量与文本字符串而不是整数进行比较?

ton*_*666 35 bash shell-script bash-scripting

在编写 shell 脚本的过程中,我遇到了以下 if/else 语句的问题,该语句位于脚本中间的某个位置:

if [ $act -eq "add" ]
then
    read - "add or update: " $comm
    git commit -m "$comm $file"
else
    git commit -m "$act $file"
fi
Run Code Online (Sandbox Code Playgroud)

返回的错误是:

./gitup: line 13: [: add: integer expression expected
Run Code Online (Sandbox Code Playgroud)

然后继续执行脚本的其余部分。如何让 if 段评估/比较变量与字符串输入而不是整数;在我尝试的其他一些事情中使用“!=”时需要一个不同的错误。

Gur*_*uru 52

像这样的东西:

act="add"
if [[ $act = "add" ]]
then
    echo good
else
    echo not good
fi
Run Code Online (Sandbox Code Playgroud)

-eq用于数字比较,=用于字符串比较

  • @josephmarhee:请注意,`[[]]` 测试是 Bash 特定的构造,并且此示例与问题中使用的 POSIX `[]` 一样有效。如果解释器被明确指定为 `#!/bin/bash` 或类似的,`[[]]` 可以毫无问题地使用(并且它比替代 _in Bash_ 快一点,我相信 - 不是它应该无论如何都是瓶颈),否则应该坚持使用`[]`。如果一个人根本不需要 Bash 细节,那么脚本在例如 Dash 中会运行得更快一些。POSIX 确保了固有的可移植性。 (4认同)

Yok*_*kai 10

这个方法也行。与@Guru 的回答非常相似,但不需要双方括号。

if [ "$act" == "add" ]
then
echo "Good!"
      else
      echo "Not good!"
fi
Run Code Online (Sandbox Code Playgroud)