comportamento di citazione della shell
Domanda
Ho appena imparato, citando in alcuni casi, e ho fatto qualcosa per testarlo, ecco cosa ho appena fatto,
$ xfs=$(find . -type f -perm -111) #find all files with x-perm
$ echo "$xfs"
./b.out
./a.out
$ echo $xfs
./b.out ./a.out #why all in one line, but the above takes two?
Se $xfs
contiene \n
, PER QUANTO NE SO, echo -e
si espanderà \n
, ma come può echo "$xfs"
prendere 2 righe?
Soluzione
Qualsiasi spazio bianco è normalmente in shell considerato un separatore di argomenti. Pertanto, il tuo primo esempio ha due argomenti. echo
Stampa gli argomenti separati da uno spazio e questo è il comportamento che vedi nel tuo secondo esempio.
Tuttavia, quando usi le citazioni, qualsiasi cosa tra di loro è un argomento ed è stampato letteralmente. L'unico argomento nel tuo primo esempio contiene già una nuova linea, quindi è stampato con una nuova linea.
Il -e
Opzione da bash
echo
incorporato regola l'espansione di sequenze di fuga come \n
; Tuttavia, non hai sequenze di fuga. La variabile contiene una nuova linea letterale.