【发布时间】:2015-03-28 00:50:20
【问题描述】:
我有两个变量line 和sorted,它们都是以空格分隔的数字字符串。我的部分脚本取决于检查这两个字符串是否相等:
if [[ $sorted == $line ]]
then
echo "test"
fi
运行它时,我没有得到任何输出。目视检查,使用:echo $sorted 和 echo $line 给出两个看似相似的输出。
我认为这可能是由于两个输出中的任何一个在末尾都有一个额外的空格字符,所以我决定检查从字符串中删除空格是否可以解决问题:
test1=`echo $sorted | tr -d ' '`
test2=`echo $line | tr -d ' '`
后续执行:
if [[ "$test1" == "$test2" ]]
then
echo "test"
fi
确实提供了所需的“测试”输出。但是,当使用wc 比较两个变量的字符数时,两个变量的输出是相同的。此外,用echo <variable> | grep -o "\s" | wc -l also 检查line 和sorted 中空白字符的数量,这两个变量的输出相同。
我的问题是什么可能导致这种行为;运行tr 可以解决问题,但是用wc 和grep 计算空格的数量表明空格(或至少是字符)的数量是相似的。
【问题讨论】:
-
尝试使用 $sorted -eq $line ?
-
@doc
-eq用于比较整数,而不是字符串。 -
如果不引用变量,您的
grep/wc计数测试几乎肯定是不正确的。wc -l计算行数,而您的echo输出应该只有一行(如果您不引用变量,即使变量内容是空格分隔而不是换行分隔)。 -
实际上,您甚至应该将
if [[ $sorted == $line ]]中的变量用双引号引起来——如果没有引号,$line将被视为模式(即受通配符匹配)而不是纯字符串。试试[[ [a-z] == [a-z] ]] && echo match和[[ abcd == a* ]] && echo match看看这个效果。
标签: bash if-statement