我正在学习bash脚本。 我从网络上获得了下面的示例脚本。bash脚本中的字符串比较
#!/bin/bash
str="test"
if [ x$str == x"test" ]; then
echo "hello!"
fi
什么是第五行(x$str
和x"test"
)X? “x
”有特殊含义吗?
我正在学习bash脚本。 我从网络上获得了下面的示例脚本。bash脚本中的字符串比较
#!/bin/bash
str="test"
if [ x$str == x"test" ]; then
echo "hello!"
fi
什么是第五行(x$str
和x"test"
)X? “x
”有特殊含义吗?
这是为了确保您的示例中表达式的左侧不是空的。如果str
未设置,则该条件将为[ == "test" ]
,这会产生错误。
而不是使用单个字母使其不为空,也可以将变量放在双引号字符中,并完全跳过x
([ "$str" == "test" ]
)。
没有特殊含义,但如果$str
是空的,那么
if [ $str == "test" ]
将导致替代的什么到测试,它会是这样
if [ == "test" ]
这将是一个语法错误。在前面添加X可以解决这个问题,但是像这样引用它
if [ "$str" == "test" ]
是一种更易于理解的实现方法。
看起来这个例子来自用于测试新的bash编译的测试用例,只有前面的x方法发现的参考文献争辩说“”方法更好,测试用例是否应该更改。 – ewanm89
什么是更好的问题 - 我已经看到了x方法的一些地方,并且我确定在管道或深度替换中有地方会使代码更具可读性 - 但是对于像这样的简单情况在上面,“”直观地被理解并且永远不会提出问题。 – Soren
是的,我没有说这是我的观点,我说这是GNU bash邮件列表上的争论。 – ewanm89