比较 [ "$var" == "value" ] 总是假的;如何调试?



我在bash中使用if语句时遇到了很多麻烦。我有:

if [ "$returncode"  == "HTTP/1.1 200 OK" ]; then
    echo "Works!"
fi

这将不能成功工作。我已经一遍又一遍地验证变量$returncode等于指定的文本,我将在此之前打印两个值,它们肯定是相同的。

我尝试了这句话的几个不同的变体,都没有运气。我觉得自己像个白痴,因为这应该是非常简单的!你觉得这里有什么问题?

如果值确实相同(没有隐藏字符),那么最有可能的问题是您的shell实际上不是bash

/bin/sh只承诺符合POSIX sh标准,==在POSIX测试中不是有效的比较运算符;符合标准的字符串比较运算符是=

也试着从行尾去掉CR:

#!/bin/bash
#      ^^^^ NOT /bin/sh ($'...' is a non-POSIX extension)
# ...and if starting with an explicit interpreter, "bash yourscript", not "sh yourscript"
set -x # this will log each command run to stderr, allowing easy debugging
if [ "${returncode%$'r'}" = "HTTP/1.1 200 OK" ]; then
  echo "Works!"
fi

${foo%val}扩展为$foo的内容,去掉包含val的后缀;在bash中,$'r'是一个引用ASCII CR字符的常量,如果使用标准UNIX工具(期望仅限lf的换行符)读取以crlf结尾的字符串,则会出现该常量。

最新更新