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

Le problème exposé dans ce sujet a été résolu.

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 ?

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