HSM*_*HSM 3 shell ksh if-statement conditional-statements
我在 KornShell (ksh) 上遇到以下代码段失败:
var1="1"
var2="2"
if [ ( "$var1" != "" -o "$var2" != "") -a ( "$var1" = "$var2" -o " "$var1" = "x") ]; then
echo "True"
else
echo "False"
fi
Run Code Online (Sandbox Code Playgroud)
ksh:语法错误:`"$var1"' 意外
据我了解,这失败是因为括号在无法识别 var1 的子shell中运行。那么如何将条件集分组在方括号内呢?
注意我已经知道以下解决方案并且不想使用它们:
你在找这个吗?
#!/bin/ksh
if [[ -n $1 || -n $2 ]] && [[ $1 == "$2" || $1 == x ]]; then
echo "True"
else
echo "False"
fi
Run Code Online (Sandbox Code Playgroud)
跑:
$ ./if.sh "" ""
False
$ ./if.sh 1 2
False
$ ./if.sh 1 1
True
$ ./if.sh x 2
True
Run Code Online (Sandbox Code Playgroud)
如果您想知道为什么您的代码失败:
\(
"
浮动所以这 ...
if [ ( "$var1" != "" -o "$var2" != "") -a ( "$var1" = "$var2" -o " "$var1" = "x") ]; then
typo ---^ ^
^------------------ missing spaces --------^
Run Code Online (Sandbox Code Playgroud)
……应该是这样的……
if [ \( "$var1" != "" -o "$var2" != "" \) -a \( "$var1" = "$var2" -o "$var1" = "x" \) ]; then
Run Code Online (Sandbox Code Playgroud)
然后它会起作用。