Subtilité sur les chaînes de caractères en Bash

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour,

J’ai appris qu’une variable en bash est représentée par une chaîne de caractères.
Pourtant, dans le code suivant, les deux boucles n’affichent pas le même résultat :

#!/bin/bash

ma_variable="1 2 3 4"

for i in $ma_variable; do
    echo $i
done


# Même boucle, avec la valeur de $ma_variable en brut
for i in "1 2 3 4"; do
    echo $i
done

La première boucle affiche les nombres les uns après les autres, et la deuxième les uns à la suite des autres :

1
2
3
4
1 2 3 4

Peut-on toujours affirmer que la valeur d’une variable est représentée par une seule et unique chaîne de caractères ?

+0 -0

Cette réponse a aidé l’auteur du sujet

Salut,

Peut-on toujours affirmer que la valeur d’une variable est représentée par une seule et unique chaîne de caractères ?

Green

Oui. C’est juste que la variable est évaluée lorsque tu écris le for, et là c’est un peu comme si son contenu était copié-collé dans la commande. Dans le premier cas tu te retrouves donc avec quelque chose d’équivalent à :

for i in 1 2 3 4; do
    echo $i
done

où il n’y a plus de guillemets, ce qui diffère donc du second exemple (mais tu as toujours des chaînes de caractères : 1, 2, 3 et 4 sont des chaînes).

Pour avoir quelque chose d’équivalent au second exemple, tu pourrais justement à nouveau utiliser des guillemets.

for i in "$ma_variable"; do
    echo $i
done
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte