J'ai vu la syntaxe suivante dans un script bash:
>$(command) &
Je sais que l'esperluette &
à la fin fait exécuter une commande en arrière-plan, mais je ne l'ai jamais vue en combinaison avec le signe dollar plus les crochets autour de la commande.
Qu'est ce que ça fait?
$( )
, mais il n'y a pas de repos. C'est juste$(command) &
, c'est ce qui me déroute.Réponses:
Réponse courte
Compte tenu de la syntaxe
$(command) &
, le résultat est le même que si vous avez pris la sortie en cours d' exécution justecommand
et essayé de courir que comme une commande. Et tout cela se ferait en arrière-plan, ce qui signifie qu'il n'y aurait pas de sortie visible ou de suspension dans le terminal.Par exemple, si nous avions un fichier texte nommé
mycommand.txt
avec le contenu:Ensuite, la commande
serait équivalent à courir
Mais depuis que nous avons ajouté l'esperluette (
&
), nous ne verrions aucune sortie de cette commande, donc ce serait assez inutile dans cet exemple.Réponse longue (explication)
Signe dollar
$
(variable)Le signe dollar devant la chose entre parenthèses se réfère généralement à une variable. Cela signifie que cette commande transmet un argument à cette variable à partir d'un script bash ou obtient la valeur de cette variable pour quelque chose. La différence dans les scripts bash pour appeler et déclarer des variables est la suivante:
Déclarez une variable sans le signe dollar et appelez-la avec un signe dollar. Par exemple, un script qui contient ce
Sortirait cela
Parenthèse
()
- Substitution de commandeLa substitution de commande permet à la sortie d'une commande de remplacer la commande elle-même. La substitution de commande se produit lorsqu'une commande est incluse comme suit:
ou
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)
.Esperluette
&
- Processus d'arrière-planEt puis l'esperluette, ou
&
symbole, est, comme vous l'avez dit, utilisé pour l'exécuter en arrière-plan.la source
il prend la sortie de "command" comme une commande et l'exécute en arrière-plan. Son fonctionnement est comparable à "eval"
la source