Substitution de commande
Une autre option consiste à utiliser la substitution de commande . Envelopper une commande dans $()
exécutera la commande et remplacera la commande par sa sortie.
cat $(find ./inhere -size 1033c 2> /dev/null)
va devenir
cat ./inhere/file1 .inhere/file3
Cela équivaut plus ou moins à utiliser l'ancien style de commandes d'encapsulation avec des ticks arrière:
cat `find ./inhere -size 1033c 2> /dev/null`
Plus de détails sur les documents liés ci-dessus
Bash effectue l'expansion en exécutant la commande dans un environnement de sous-shell et en remplaçant la substitution de commande par la sortie standard de la commande, avec tous les retours à la ligne supprimés. Les sauts de ligne incorporés ne sont pas supprimés, mais ils peuvent être supprimés lors du fractionnement des mots. La substitution de commande $(cat file)
peut être remplacée par l'équivalent mais plus rapidement $(< file)
.
Lorsque l'ancienne forme backquote de substitution est utilisé, conserve son sens anti - slash littéral , sauf si elle est suivie par $
, `
ou \
. La première citation inverse non précédée d'une barre oblique inverse met fin à la substitution de commande. Lors de l'utilisation du $(command)
formulaire, tous les caractères entre parenthèses constituent la commande; aucun n'est traité spécialement.
Les substitutions de commandes peuvent être imbriquées. Pour imbriquer lorsque vous utilisez le formulaire guillemets inversés, échappez aux guillemets intérieurs avec des barres obliques inverses.
Si la substitution apparaît entre guillemets, le fractionnement de mots et l'expansion de nom de fichier ne sont pas effectués sur les résultats.
Voir cette autre réponse pour quelques bons exemples d'utilisation.