Comment définir une variable à la sortie d'une commande en Bash ?

J'ai un script assez simple qui ressemble à ce qui suit :

#!/bin/bash

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

echo $MOREF

Lorsque je lance ce script à partir de la ligne de commande et que je lui passe les arguments, je n'obtiens aucune sortie. Cependant, lorsque j'exécute les commandes contenues dans la variable $MOREF, j'obtiens une sortie.

Comment peut-on prendre les résultats d'une commande qui doit être exécutée dans un script, les enregistrer dans une variable, puis afficher cette variable à l'écran ?

Solution

En plus des backticks command vous pouvez utiliser $(command) ou "$(command)" que je trouve plus facile à lire, et qui permettent l'imbrication.

OUTPUT="$(ls -1)"
echo "${OUTPUT}"

MULTILINE=$(ls \
   -1)
echo "${MULTILINE}"

La citation (") est importante pour préserver les valeurs multi-lignes.

Commentaires (14)

Le bon chemin est

$(sudo run command)

Si vous devez utiliser une apostrophe, vous devez utiliser ``, et non `'. Ce caractère est appelé "backticks" (ou "grave accent").

Comme ceci :

#!/bin/bash

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

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

echo "$MOREF"
Commentaires (4)

Juste pour être différent :

MOREF=$(sudo run command against $VAR1 | grep name | cut -c7-)
Commentaires (0)