bash: $ [] vs. $ (())
-
19-09-2019 - |
Domanda
Ho appena inciampato sulla sintassi bash:
foo=42
bar=$[foo+1] # evaluates an arithmetic expression
Quando ho Googled per questo, ho trovato http: // tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_04.html#sect_03_04_05 :
3.4.6. espansione aritmetica
Espansione aritmetica permette la valutazione di un'espressione aritmetica e la sostituzione del risultato. Il formato per l'espansione aritmetica è:
$(( EXPRESSION ))
...
Per quanto possibile, gli utenti di Bash dovrebbero cercare di usare la sintassi con le parentesi quadre:
$[ EXPRESSION ]
Tuttavia, questo calcolerà solo il risultato di espressione, e fare nessun test ...
Nella mia pagina man di bash posso solo trovare il modulo $(( EXPRESSION ))
come ad esempio:
foo=42
bar=$((foo+1)) # evaluates an arithmetic expression
Così che i test non vengono eseguiti con $[...]
che fare con $((...))
, o è il $[...]
solo una versione precedente di $((...))
?
Soluzione
La pagina di manuale di bash v3.2.48 dice:
[...] Il formato per l'espansione aritmetica è:
$((expression))
Il vecchio formato $ [espressione] è deprecato e verrà rimossa in future versioni di bash.
Quindi $[...]
è vecchia sintassi che non deve essere più utilizzato.
Altri suggerimenti
@sth è del tutto corretto. E nel caso in cui siete curiosi di sapere il motivo per cui una sintassi più prolissa è ora a favore, controlla questa vecchia e-mail dalla mailing list.
http://lists.gnu.org/archive/html/bug -bash / 2012-04 / msg00033.html
“Nelle prime proposte, è stata utilizzata una forma $ [espressione]. E 'stato funzionalmente equivalente al "$ (())" del testo attuale, ma le obiezioni erano depositata che il 1988 KornShell aveva già implementato "$ (())" e non vi era alcuna ragione per inventarsi un'altra sintassi. Inoltre, il "$ []" sintassi aveva un'incompatibilità minore che coinvolge i modelli in dichiarazioni caso “.
Non sono sicuro che mi piace la logica “ma qualcuno ha già fatto più verboso”, ma il gioco è fatto, forse il problema caso-economico è stato più convincente di quanto sto immaginando da questo oscuro accenno?