Befehlsersetzung
Eine andere Option ist die Verwendung der Befehlssubstitution . Wenn Sie einen Befehl einschließen, $()
wird der Befehl ausgeführt und der Befehl durch seine Ausgabe ersetzt.
cat $(find ./inhere -size 1033c 2> /dev/null)
wird werden
cat ./inhere/file1 .inhere/file3
Dies entspricht mehr oder weniger der Verwendung des älteren Stils zum Umschließen von Befehlen mit Back Ticks:
cat `find ./inhere -size 1033c 2> /dev/null`
Weitere Details finden Sie in den oben verlinkten Dokumenten
Bash führt die Erweiterung durch, indem der Befehl in einer Subshell-Umgebung ausgeführt und die Befehlsersetzung durch die Standardausgabe des Befehls ersetzt wird, wobei alle nachfolgenden Zeilenumbrüche gelöscht werden. Eingebettete Zeilenumbrüche werden nicht gelöscht, können jedoch während der Wortteilung entfernt werden. Die Befehlsersetzung $(cat file)
kann durch die entsprechende ersetzt werden, jedoch schneller $(< file)
.
Wenn die alten Stil Backquote Form der Substitution verwendet wird, behält Backslash seine wörtliche Bedeutung , außer wenn gefolgt von $
, `
oder \
. Das erste Backquote, dem kein Backslash vorangestellt ist, beendet die Befehlsersetzung. Bei Verwendung des $(command)
Formulars bilden alle Zeichen zwischen den Klammern den Befehl. keine werden speziell behandelt.
Befehlsersetzungen können verschachtelt sein. Um bei Verwendung des Formulars mit Anführungszeichen zu verschachteln, müssen Sie die inneren Anführungszeichen mit umgekehrten Schrägstrichen maskieren.
Wenn die Ersetzung in doppelten Anführungszeichen angezeigt wird, werden für die Ergebnisse keine Wortaufteilung und Dateinamenerweiterung durchgeführt.
In dieser anderen Antwort finden Sie einige gute Anwendungsbeispiele.