我在KornShell(ksh)上得到以下代码段失败:
var1="1"
var2="2"
if [ ( "$var1" != "" -o "$var2" != "") -a ( "$var1" = "$var2" -o " "$var1" = "x") ]; then
echo "True"
else
echo "False"
fi
ksh:语法错误:`“$ var1”'意外
据我所知,这会失败,因为括号在子shell中运行,而无法识别var1。 那么怎样才能将条件集合在方括号内呢?
N.B。我已经知道以下解决方案,不想使用它们:
答案 0 :(得分:3)
你在找这个吗?
#!/bin/ksh
if [[ -n $1 || -n $2 ]] && [[ $1 == "$2" || $1 == x ]]; then
echo "True"
else
echo "False"
fi
执行命令
$ ./if.sh "" ""
False
$ ./if.sh 1 2
False
$ ./if.sh 1 1
True
$ ./if.sh x 2
True
如果您想知道代码失败的原因:
\(
"
漂浮在所以这......
if [ ( "$var1" != "" -o "$var2" != "") -a ( "$var1" = "$var2" -o " "$var1" = "x") ]; then
typo ---^ ^
^------------------ missing spaces --------^
......应该看起来像......
if [ \( "$var1" != "" -o "$var2" != "" \) -a \( "$var1" = "$var2" -o "$var1" = "x" \) ]; then
然后它会起作用。
答案 1 :(得分:0)
你需要使用双方括号.. [[--------]]
希望它有所帮助。
问候。