如何正确转义字符串以在shell中进行测试?

时间:2012-07-10 12:11:47

标签: shell busybox

我有以下功能:

testit()
{
[ "$1" == "OK" ] && echo "good" || echo "bad"
}

但它没有按预期工作。我可以用它来打电话:

testit 'OK' #good
testit 'abc' #bad

但是当我用它打电话时:

testit '('

它失败了:“sh:关闭paren预期”。我引用了字符串进行测试,为什么它的行为就像没有引号?

2 个答案:

答案 0 :(得分:1)

这很可能是shell实现中的一个错误。我已经在最新的CentOS上测试了你的代码,它运行正常。

testit '('
bad

 sh -version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

答案 1 :(得分:0)

这是一个丑陋的解决方法:

if [ "x$1" = "xOK" ]; ...