2011-11-05 123 views
6

我正在学习bash脚本。 我从网络上获得了下面的示例脚本。bash脚本中的字符串比较

#!/bin/bash 

str="test" 

if [ x$str == x"test" ]; then 
    echo "hello!" 
fi 

什么是第五行(x$strx"test")X? “x”有特殊含义吗?

回答

2

这是为了确保您的示例中表达式的左侧不是空的。如果str未设置,则该条件将为[ == "test" ],这会产生错误。

而不是使用单个字母使其不为空,也可以将变量放在双引号字符中,并完全跳过x[ "$str" == "test" ])。

9

没有特殊含义,但如果$str是空的,那么

if [ $str == "test" ] 

将导致替代的什么到测试,它会是这样

if [ == "test" ] 

这将是一个语法错误。在前面添加X可以解决这个问题,但是像这样引用它

if [ "$str" == "test" ] 

是一种更易于理解的实现方法。

+0

看起来这个例子来自用于测试新的bash编译的测试用例,只有前面的x方法发现的参考文献争辩说“”方法更好,测试用例是否应该更改。 – ewanm89

+0

什么是更好的问题 - 我已经看到了x方法的一些地方,并且我确定在管道或深度替换中有地方会使代码更具可读性 - 但是对于像这样的简单情况在上面,“”直观地被理解并且永远不会提出问题。 – Soren

+0

是的,我没有说这是我的观点,我说这是GNU bash邮件列表上的争论。 – ewanm89