如何将以下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测试命令参数无效。
答案 0 :(得分: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 :(得分:1)
试试这个:
if [ $# -eq 4 ] && [ "$4" = "PREV" ]
then
print "yes"
fi
答案 2 :(得分:1)
'['不是sh中的分组标记。你可以这样做:
if [ expr ] && [ expr ]; then ...
或
if cmd && cmd; then ...
或
if { cmd && cmd; }; then ...
您也可以使用括号,但语义略有不同,因为测试将在子shell中运行。
if ( cmd && cmd; ); then ...
另外,请注意“if cmd1; then cmd2; fi”与“cmd1&& cmd2”完全相同,所以你可以写:
test $# = 4 && test $4 = PREV && echo yes
但如果您打算检查最后一个参数是字符串PREV,您可以考虑:
eval test \$$# = PREV && echo yes