bash
definisce diversi metacaratteri . Da man bash
:
metacarattere
Un personaggio che, quando non quotato, separa le parole. Uno dei seguenti:
| &; () <> scheda spazio
Poiché i metacaratteri separano le parole, non importa se sono circondati da spazi. Il simbolo della pipa |
, è un metacarattere e quindi, come hai notato, non ha bisogno di spazi attorno.
Si noti che [
, ]
, {
, }
, e =
sono senza metacaratteri. Il loro significato, al contrario, dipende fortemente dal fatto che siano circondati da spazi vuoti.
Esempi di quando gli spazi sono e non sono necessari
Come hai notato, non importa se |
è circondato da spazi. Consideriamo alcuni esempi che comunemente confondono gli utenti bash. Ritenere:
$ (date)
Sun Mar 1 12:47:07 PST 2015
Le parentesi precedenti obbligano l' date
esecuzione del comando in una subshell. Perché (
e )
sono metacaratteri, non sono necessari spazi. Al contrario:
$ {date}
bash: {date}: command not found
Poiché {
e non}
sono metacaratteri, la shell considera una parola. Invece di cercare il comando, cerca un comando denominato . Perché non ne trova uno, si verifica un errore.{date}
date
{date}
Un altro problema comune è il test
comando. Di seguito funziona correttamente:
$ [ abc ] && echo Yes
Yes
Rimuovere gli spazi e si verifica un errore:
$ [abc] && echo Yes
bash: [abc]: command not found
Poiché [
e non]
sono metacaratteri, la shell considera una singola parola e il risultato, proprio come nell'esempio, è un errore.[.bashrc]
date
Anche le dichiarazioni di assegnazione sono sensibili agli spazi. La seguente assegnazione ha esito positivo:
$ v=date
$ echo $v
date
Aggiungi uno spazio e l'assegnazione non riesce:
$ v= date
Sun Mar 1 12:55:05 PST 2015
In quanto sopra, la shell temporaneamente imposta v
su vuoto e quindi esegue il date
comando.
L'aggiunta di uno spazio prima =
causa anche un errore ma per un motivo diverso:
$ v =date
bash: v: command not found
Qui, la shell tenta di eseguire il comando v
con l'argomento =date
. L'errore è perché non è stato trovato alcun comando denominato v
.