Risposte:
Nel tuo primo esempio, $((X+1))
valuta l'espressione X + 1 e si espande al risultato, che viene quindi assegnato alla variabile.
Nel secondo esempio, $((X=X+1))
incrementi X
di uno ( $((X++))
vale anche e più breve, ma non necessariamente supportata dalla shell), poi si espande al nuovo valore di $X
, che è il primo argomento al comando nullo, :
. Il comando null ignora i suoi argomenti e il risultato viene scartato (con effetti collaterali).
Preferirei personalmente la prima forma per tre motivi (relativamente soggettivi):
Dovresti usare la prima versione se modificassi l'ambiente di un solo comando come
X=$((X+1)) /usr/local/bin/something
Dovresti utilizzare il secondo modulo per aggiungere direttamente la valutazione agli argomenti:
ls -la "file-$((X++))" # or ...
ls -la "file-$((X=X+1))" # for better compatibility
Questo ha gli effetti collaterali desiderati, salva una riga ed è abbastanza chiaro.