Bash没有将字符串识别为相等

时间:2015-03-27 16:36:06

标签: bash if-statement

我有两个变量linesorted,它们都是以空格分隔的数字字符串。我的部分脚本取决于检查这两个字符串是否相等:

if [[ $sorted == $line ]]
then
echo "test"
fi

运行时我没有输出。使用:echo $sortedecho $line进行目视检查会产生两个看似相似的输出。

我认为这可能是由于两个输出中的任何一个在末尾都有一个额外的空格字符,所以我决定检查从字符串中删除空格是否删除了问题:

test1=`echo $sorted | tr -d ' '`
test2=`echo $line | tr -d ' '`

随后执行:

if [[ "$test1" == "$test2" ]]
then 
echo "test"
fi

是否给出了所需的&#34;测试&#34;输出。但是,使用wc比较两个变量的字符数时,两个变量的输出相同。此外,使用line 检查sortedecho <variable> | grep -o "\s" | wc -l中的空白字符数也为两个变量提供相同的输出。

我的问题是可能导致这种行为的原因;运行tr可以解决问题,但使用wcgrep计算空格数会显示空格数(或至少字符数)相似。

1 个答案:

答案 0 :(得分:3)

我认为你的一些测试是否会破坏字符串是否相同,因为你没有引用你的变量。此测试应显示两个变量的不同计数:

echo "$var_name" | grep -c "\s"

您可以使用declare -p var_name查看变量的内容,该内容应显示前导/尾随空格的位置。

在您使用bash时,您还可以利用<<< 此处字符串语法,而不是使用echo

grep -c "\s" <<<"$var_name"

正如kojiro在评论中指出的那样(感谢),这是一种更强大的方法,可以节省创建子shell。