2456 votes

Comment définir une variable BASH égale à la sortie d’une commande ?

Je suis en train de travailler sur un script simple projet pour le travail qu'implique l'utilisation de BASH. J'ai un assez simple script qui est quelque chose comme ce qui suit:

#!/bin/bash

VAR1="$1"
VAR2="$2"

MOREF='sudo run command against $VAR1 | grep name | cut -c7-'

echo $MOREF

Lorsque j'exécute ce script à partir de la ligne de commande et transmettre les arguments que je ne suis pas en mesure d'obtenir n'importe quelle sortie. Cependant, lorsque je lance les commandes contenues dans le MOREF variable, je suis en mesure d'obtenir en sortie. Je voudrais savoir comment on peut prendre les résultats d'une commande qui doit être exécutée à l'intérieur d'un script, l'enregistrer dans une variable, puis sortie de cette variable sur l'écran?

3222voto

Andy Lester Points 34051

Outre les obliques, vous pouvez utiliser `` , que je trouve plus facile à lire et permet pour la nidification.

Citation ( `` ) est important pour conserver les valeurs de plusieurs lignes.

377voto

Ilya Kogan Points 7357

Vous utilisez le mauvais type d’apostrophe. Vous avez besoin , pas . Ce personnage est appelé « obliques » (ou « accent grave »).

Comme ça :

82voto

bitwelder Points 310

Comme ils ont déjà indiqué pour vous, vous devez utiliser « backticks ».

L’alternative proposée `` fonctionne aussi bien et il est aussi plus facile à lire, mais notez que c’est valide uniquement avec bash ou korn shells (et dérivés de ceux de coquilles), donc si vos scripts doivent être vraiment portable sur plusieurs systèmes Unix, vous devez préférer le vieux nota obliques tion.

55voto

MortezaLSC Points 1857

Je sais que de trois façons:

1) les Fonctions sont appropriés pour de telles tâches:

func (){
ls -l
}

L'appeler en disant func

2) Aussi une autre solution appropriée pourrait être eval:

var="ls -l"
eval $var

3) La troisième est l'utilisation de variables directement:

var=$(ls -l)
OR
var=`ls -l`

vous pouvez obtenir la sortie de la troisième solution de bon sens:

echo "$var"

et aussi en mauvaise façon:

echo $var

19voto

Blagovest Buyukliev Points 22767

Vous devez entourer la commande dans backticks :

Mettre une commande en apostrophes inverses l’exécute et retourne la sortie sans l’imprimer sur l’écran.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X