我有以下功能:
testit()
{
[ "$1" == "OK" ] && echo "good" || echo "bad"
}
但它没有按预期工作。我可以这样称呼它:
testit 'OK' #good
testit 'abc' #bad
但是当我用以下方式调用它时:
testit '('
它失败了:“sh:预期关闭paren”。我已经引用了要测试的字符串,那么为什么它的行为就像没有引号一样?
这很可能是您的 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.
这是一个丑陋的解决方法:
if [ "x$1" = "xOK" ]; ...