declarație if else într-o singură linie folosind && și || (Unix, Script Shell)

utilizator3014282 a intrebat.

Aș dori să știu dacă aceste 2 moduri sunt echivalente:

Prima:

#!/bin/bash
if [ -x $FILE ]
then
  echo "You have execution permission to a "$FILE""
else
  echo "You don't have execution permission to a "$FILE""
fi

A doua:

#!/bin/bash
[ -x $FILE ] && echo "You have execution permission to a "$FILE"" || echo "You don't have execution permission to a "$FILE""

Comentarii

  • Citarea ta este greșită: [ -x "$FILE" ]; echo "You have execution permission to '$FILE'" –  > Por Hauke Laging.
  • Bine, mulțumesc, dar se pare că și codul meu funcționează în același mod (poate că nu este în concordanță cu standardul :)) Dar sunt aceste 2 moduri echivalente? –  > Por user3014282.
  • Faptul că versiunea dvs. funcționează sau nu depinde de aceasta dacă numele fișierului conține spații albe (sau, mai precis: IFS caractere). –  > Por Hauke Laging.
1 răspunsuri
Hauke Laging

Structurile nu sunt echivalente în general, dar în acest caz sunt. Motivul este că echo are întotdeauna codul de ieșire 0. Dacă ar fi fost în schimb o comandă care poate ieși cu un cod mai mare decât zero, atunci ar fi fost executată și „cealaltă ramură”. Acest lucru este imposibil în if caz.

Comentarii

  • Site-ul if caz este, de asemenea, mult mai ușor de citit. –  > Por jkt123.
  • @user3014282: Pentru a dezvolta răspunsul lui Hauke, [ -e /tmp ] && { echo 1 ; false ; } || echo 2 va imprima atât 1 și 2. Reconstituirea aceluiași lucru folosind if ... then ... else ... fi va imprima doar 1. Deci && || nu este un echivalent exact al celuilalt. –  > Por jamadagni.