if else-Anweisung in einer Zeile mit && und ||


7

Ich würde gerne wissen, ob diese beiden Möglichkeiten gleichwertig sind:

Zuerst:

#!/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

Zweite:

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

1
Ihr Zitat ist falsch : [ -x "$FILE" ]; echo "You have execution permission to '$FILE'"
Hauke ​​Laging

Ok, danke, aber anscheinend funktioniert mein Code genauso (möglicherweise nicht mit dem Standard vereinbar :)). Aber sind diese beiden Methoden gleichwertig?
user3014282

1
Ob Ihre Version funktioniert, hängt davon ab, ob der Dateiname Leerzeichen enthält (oder genauer: IFSZeichen).
Hauke ​​Laging

Antworten:


5

Die Strukturen sind im Allgemeinen nicht gleichwertig, in diesem Fall jedoch. Der Grund ist, dass echoimmer Exit-Code 0 vorhanden ist. Wenn dies stattdessen ein Befehl wäre, der mit einem Code größer als Null beendet werden kann, würde auch "der andere Zweig" ausgeführt. Dies ist in diesem ifFall nicht möglich.


2
Der ifFall ist auch viel besser lesbar.
Jkt123

1
@ user3014282: Um die Antwort von Hauke ​​zu erläutern, [ -e /tmp ] && { echo 1 ; false ; } || echo 2werden beide 1und gedruckt 2. Wenn Sie dasselbe mit neu erstellen, if ... then ... else ... fiwird nur gedruckt 1. Ist && ||also kein genaues Äquivalent zum anderen.
Jamadagni
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.