In Ihrem ersten Beispiel wird $((X+1))
der Ausdruck X + 1 ausgewertet und zum Ergebnis erweitert, das dann der Variablen zugewiesen wird.
Im zweiten Beispiel werden $((X=X+1))
Inkremente X
um eins ( $((X++))
ebenfalls gültig und kürzer, aber nicht unbedingt von der Shell unterstützt) auf den neuen Wert von erweitert $X
, der das erste Argument für den Befehl null ist :
. Der Befehl null ignoriert seine Argumente und das Ergebnis wird verworfen (mit Nebenwirkungen).
Ich persönlich würde die erste Form aus drei (relativ subjektiven) Gründen vorziehen:
- Der Null-Befehl ist unklar und wird missverstanden, was darauf hindeutet, dass er hier häufig Gegenstand verwirrter Fragen ist.
- Die erste Form erscheint in Bezug auf die allgemeine Shell-Grammatik natürlicher und ähnelt sogar ein wenig dem alten Bewertungsstil.
- Die erste Form ist klarer und prägnanter und beinhaltet keinen Befehl.
Sie müssten die erste Version verwenden, wenn Sie die Umgebung von nur einem Befehl wie ändern würden
X=$((X+1)) /usr/local/bin/something
Sie müssten das zweite Formular verwenden, um Argumenten direkt eine Bewertung hinzuzufügen:
ls -la "file-$((X++))" # or ...
ls -la "file-$((X=X+1))" # for better compatibility
Dies hat die gewünschten Nebenwirkungen, spart eine Zeile und ist ziemlich klar.