Cosa significa un simbolo del dollaro seguito da una parentesi quadra $ […] in bash?


34

Sembra che $[expr]esegua l'espansione aritmetica proprio come $((expr)). Ma non riesco a trovare alcuna menzione $[nel manuale di Bash. Questo comando non dà risultati:

gunzip -c /usr/share/man/man1/bash.1.gz | grep -E '\$\['

Cos'è questo operatore e il suo comportamento è standardizzato ovunque?

La mia versione bash: GNU bash, versione 3.2.51 (1) -release (x86_64-apple-darwin13)


3
Per rispondere esplicitamente alla tua domanda su uno standard : la sintassi bashspecifica (obsoleta) $[...]non è standard. Il $((...))(che deriva da ksh) è lo standard POSIX.
Janis,

2
Con Ubuntu 11.04: man bash | grep -E '\$\['. Output: il vecchio formato $ [espressione] è obsoleto e verrà rimosso nelle prossime versioni
Cyrus,

le pagine man potrebbero contenere cose come _t_h_i_s (che viene quindi interpretato dall'utilità man in modo da apparire in modo diverso) in modo che il tuo grep potrebbe fallire se succede che la cosa che cerchi dovrebbe essere notata in questo modo
Olivier Dulac il

Risposte:


19

Puoi trovare la vecchia fonte bash qui . In particolare ho scaricato bash-1.14.7.tar.gz . Nel documentation/bash.txttroverai:

Espansione aritmetica

L'espansione aritmetica consente la valutazione di un'espressione aritmetica e la sostituzione del risultato. Esistono due formati per l'espansione aritmetica:

     $[expression]

     $((expression))

I riferimenti a $[se ne sono andati in doc/bash.htmldalla bash-doc-2.0.tar.gz scaricare e il NEWSfile di menzioni che:

La $[...]sintassi di espansione aritmetica non è più supportata, a favore di $((...)).

$((...))è anche la sintassi standard per un'espansione aritmetica, ma potrebbe essere stata aggiunta allo standard più tardi rispetto all'implementazione originale di Bash.

Tuttavia, $[...]sembra funzionare ancora in Bash 5.0, quindi non è stato completamente rimosso.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.