2012-01-04 83 views
1

如何將以下if語句合併到一行中?在Ksh中合併多個if語句

if [ $# -eq 4 ] 
then 
     if [ "$4" = "PREV" ] 
     then 
       print "yes" 
     fi 
fi 
if [ $# -eq 3 ] 
then 
     if [ "$3" = "PREV" ] 
     then 
       print "yes" 
     fi 
fi 

我正在使用ksh。

爲什麼會發生錯誤?

if [ [ $# -eq 4 ] && [ "$4" = "PREV" ] ] 
     then 
       print "yes" 
     fi 

錯誤:

0403-012 A test command parameter is not valid.

回答

2

試試這個:

if [[ $# -eq 4 && "$4" == "PREV" ]] 
then 
    print "yes" 
fi 

您也可以嘗試把它們放在一起這樣的:

if [[ $# -eq 4 && "$4" == "PREV" || $# -eq 3 && "$3" == "PREV" ]] 
then 
    print "yes" 
fi 

你只是想檢查如果最後一個參數是「PREV」?如果是的話,你也可以做這樣的事情:

for last; do true; done 
if [ "$last" == "PREV" ] 
then 
    print "yes" 
fi 
1

試試這個:

if [ $# -eq 4 ] && [ "$4" = "PREV" ] 
    then 
      print "yes" 
    fi 
1

'[' 是不是在SH A分組令牌。你可以這樣做:

 
if [ expr ] && [ expr ]; then ... 

 
if cmd && cmd; then ... 

 
if { cmd && cmd; }; then ... 

您也可以使用括號,但語義略有不同的測試將在一個子shell中運行。

 
if (cmd && cmd;); then ... 

另外請注意, 「如果CMD1;然後CMD2;網絡」 是完全一樣的 「CMD1 & & CMD2」,所以你可以寫:

 
test $# = 4 && test $4 = PREV && echo yes 

,但如果你的意圖是檢查最後一個參數是字符串PREV,您可能會考慮:

 
eval test \$$# = PREV && echo yes 
+0

請注意,第一個示例僅僅是第二個示例,命令爲'[' – 2012-01-04 12:32:14