Définir la variable sur la sortie de la commande dans Bash
Ce didacticiel illustre l’affectation de la sortie d’une commande à une variable dans bash à l’aide de la substitution de commande.
Substitution de commandes dans Bash
La substitution de commande est une fonctionnalité bash qui nous permet d’exécuter des commandes Linux et de stocker la sortie de la commande dans une variable bash. Une fois qu’une commande est exécutée à l’aide de la syntaxe de substitution de commande, la sortie standard de la commande remplace la commande, toutes les nouvelles lignes de fin étant supprimées.
La substitution de commande utilise deux syntaxes différentes pour stocker la sortie de la commande dans une variable.
Le premier type de syntaxe place la commande entre parenthèses et ajoute un signe $
au début, comme indiqué ci-dessous.
Chaque caractère entre parenthèses est traité comme faisant partie de la commande.
output=$(command)
output=$(command argument-1)
output=$(/path/to/command)
output=$(/path/to/command argument-1)
Le deuxième type de syntaxe utilise des backticks autour de la commande.
output=`command`
output=`command argument-1`
output=`/path/to/command`
output=`/path/to/command argument-1`
Sortie de la commande bash vers la variable
Nous utilisons les exemples suivants pour démontrer la substitution de commande dans un script bash.
Ci-dessous, nous utilisons la première syntaxe de parenthèses et un signe dollar au début. La commande whoami
est exécutée et la sortie remplace la commande, qui est ensuite affectée à la variable user
. Nous utilisons la commande echo
pour afficher le message sur la sortie standard.
user=$(whoami)
echo "The logged in user is $user"
L’exécution de ce script affiche la sortie suivante.
The logged in user is delftstack
Ci-dessous, nous utilisons la syntaxe backticks. La sortie de la commande whoami
est affectée à la variable user
et echo
est utilisé pour imprimer le message au terminal.
user=`whoami`
echo "The logged in user is $user"
L’exécution du script affiche la sortie ci-dessous.
The logged in user is delftstack
Dans le script ci-dessous, nous utilisons ls
pour lister le contenu du dossier delftstack
en utilisant la parenthèse et la syntaxe du signe dollar. La sortie de la commande ls
est affectée à la variable files
. La commande echo
est utilisée pour imprimer le contenu de la variable files
au terminal.
files=$(ls -l delftstack)
echo "$files"
L’exécution du script imprime la sortie suivante sur la sortie standard.
total 4
-rw-r--r-- 1 fumba fumba 752 Nov 17 12:51 directory.sh
-rw-r--r-- 1 fumba fumba 79 Nov 19 13:11 foo1.sh
drwxr-xr-x 1 fumba fumba 4096 Nov 22 13:57 part
-rw-r--r-- 1 fumba fumba 213 Nov 21 21:10 regex.sh
Le script bash ci-dessous utilise la syntaxe backticks pour affecter la sortie de la commande ls
à la variable files
, et la commande echo
est utilisée pour imprimer le contenu de la variable files
sur la sortie standard.
files=`ls -l delftstack`
echo "$files"
L’exécution du script affiche la sortie suivante.
total 4
-rw-r--r-- 1 fumba fumba 752 Nov 17 12:51 directory.sh
-rw-r--r-- 1 fumba fumba 79 Nov 19 13:11 foo1.sh
drwxr-xr-x 1 fumba fumba 4096 Nov 22 13:57 part
-rw-r--r-- 1 fumba fumba 213 Nov 21 21:10 regex.sh
Nous utilisons la syntaxe suivante pour affecter une commande multiligne à une variable dans le script bash.
variable_name=$(command \
argument 1 \
argument 2 \
argument 3)
Le script bash ci-dessous illustre l’affectation de la sortie d’une commande multiligne à une variable. La commande ls
répertorie tout le contenu du dossier actuel et la sortie est redirigée vers la commande head
. La commande head
ne sélectionne que les 5
premières lignes de l’entrée de ls
et redirige la sortie vers la commande grep
. La commande grep
fait correspondre la ligne avec le mot flow
et l’imprime sur la sortie standard.
files=$(ls -l \
| \
head -5 \
| grep -i "flow")
echo $files
L’exécution du script affiche la sortie suivante.
drwxr-xr-x 1 fumba fumba 4096 Sep 30 09:29 airflow