我有一个bash脚本调用另一个bash脚本并从第二个脚本获取字符串返回值。然后我尝试将该字符串与硬编码值进行比较,即使我认为它是正确的,它也会跳过if语句并转到其他位置。
这是一些代码,只是更改了变量名称:
returnVar=$(/bin/sh ./returnVar.sh ${1})
echo variable from second script = $returnVar
if [ "$returnVar" == "Value-Enabled false" ] ; then
variableName="variable1"
#do other stuff here
elif [ "$returnVar" == "Value-Enabled true" ] ; then
variableName="variable2"
#do other stuff here
else
echo error
exit 1
fi
这个问题:
来自第二个脚本的echo变量=“$ returnVar”
似乎返回我想要的答案,“Value-Enabled false”,但比较不起作用。任何人都可以看到我出错的地方并知道如何提供帮助吗?
我也尝试将returnVar硬编码为我想要的字符串,然后工作!所以我不知道出了什么问题。
提前致谢!
答案 0 :(得分:4)
我遇到了类似的问题,问题是其中一个字符串以' \ r'回车,另一个没有。
因此,您可能希望在比较之前清理字符串(删除任何特殊字符)。我只能抓住' \ r'当我写一个简短的python脚本来为我做字符串比较时:
#!/usr/bin/env python
import sys
if len(sys.argv) == 3 and \
len(sys.argv[1]) > 0 and \
len(sys.argv[2]) > 0 and \
sys.argv[1].rstrip('\r') == sys.argv[2].rstrip('\r'):
print "same"
else:
print "different\n"-
在bash中,您可以删除' \ r'来自$ str字符串的方式如下:
str_sanitized=$(echo $str | tr -d '\r')
答案 1 :(得分:2)
终于搞定了!这是适用于我的新代码:
returnVar=$(/bin/sh ./returnVar.sh ${1})
newVar=$(echo "${returnVar}" | tr -d '\n')
if [ "${newVar}" == "Value-Enabled false" ] ; then
variableName="variable1"
#do other stuff here
elif [ "${newVar}" == "Value-Enabled true" ] ; then
variableName="variable2"
#do other stuff here
else
echo error
exit 1
fi
将新值保存到名为newVar的变量中,并在if语句中的newVar周围添加了大括号。
答案 2 :(得分:0)
您可以使用“-eq”操作符代替“==”来提供所需的输出。