0

我有以下功能:

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

但它没有按预期工作。我可以这样称呼它:

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

但是当我用以下方式调用它时:

testit '('

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

4

2 回答 2

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.
于 2012-07-10T12:25:19.127 回答
0

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

if [ "x$1" = "xOK" ]; ...
于 2012-07-10T14:51:00.903 回答