Sostituzione comando
Un'altra opzione è utilizzare la sostituzione dei comandi . L'avvolgimento di un comando $()
eseguirà il comando e sostituirà il comando con il suo output.
cat $(find ./inhere -size 1033c 2> /dev/null)
diventerà
cat ./inhere/file1 .inhere/file3
Questo è più o meno equivalente all'utilizzo del vecchio stile di comandi di wrapping con tick posteriori:
cat `find ./inhere -size 1033c 2> /dev/null`
Maggiori dettagli dai documenti collegati sopra
Bash esegue l'espansione eseguendo il comando in un ambiente subshell e sostituendo la sostituzione del comando con l'output standard del comando, eliminando eventuali newline finali. Le nuove righe incorporate non vengono eliminate, ma possono essere rimosse durante la divisione delle parole. La sostituzione del comando $(cat file)
può essere sostituita dall'equivalente ma più veloce $(< file)
.
Quando si utilizza il modulo di backquote vecchio stile di sostituzione, backslash conserva il suo significato letterale tranne quando seguito da $
, `
o \
. Il primo backquote non preceduto da una barra rovesciata termina la sostituzione del comando. Quando si utilizza il $(command)
modulo, tutti i caratteri tra parentesi formano il comando; nessuno è trattato in modo speciale.
Le sostituzioni di comandi possono essere nidificate. Per nidificare quando si utilizza il modulo con virgolette, sfuggire ai backquotes interni con barre rovesciate.
Se la sostituzione appare tra virgolette, la divisione delle parole e l'espansione del nome del file non vengono eseguite sui risultati.
Vedi questa altra risposta per alcuni buoni esempi di utilizzo.