3 Stimmen

Konsolidierung mehrerer if-Anweisungen in Ksh

Wie kann ich die folgenden if-Anweisungen in einer einzigen Zeile zusammenfassen?

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

Ich verwende ksh.

Warum wird hier ein Fehler angezeigt?

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

Fehler:

0403-012 Ein Prüfbefehlsparameter ist nicht gültig.

3voto

dogbane Punkte 253146

Versuchen Sie dies:

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

Sie können auch versuchen, sie wie folgt zusammenzustellen:

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

Wollen Sie nur prüfen, ob das letzte Argument "PREV" ist? Wenn ja, können Sie auch etwas wie dies tun:

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

3voto

William Pursell Punkte 188248

'[' ist kein Gruppierungstoken in sh. Das können Sie tun:

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

oder

if cmd && cmd; then ...

oder

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

Sie können auch Klammern verwenden, aber die Semantik ist etwas anders, da die Tests in einer Subshell ausgeführt werden.

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

Beachten Sie auch, dass "if cmd1; then cmd2; fi" genau dasselbe ist wie "cmd1 && cmd2", Sie könnten also schreiben:

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

aber wenn Sie überprüfen wollen, ob das letzte Argument die Zeichenkette PREV ist, können Sie dies in Betracht ziehen:

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

1voto

Ali Ismayilov Punkte 1687

Versuchen Sie dies:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X