HOWTO · Linux
Comment concaténer des chaînes en Bash
Découvrez comment concaténer des chaînes en Bash : juxtaposez des valeurs, ajoutez du texte avec +=, construisez une chaîne dans une boucle ou insérez la sortie d’une commande. Des exemples expliquent aussi comment gérer les espaces et citer les expansions.
Sur cette page
En Bash, concaténez des chaînes en plaçant des valeurs citées côte à côte, ou ajoutez du texte à une variable existante avec +=. Un espace n’apparaît que si vous l’incluez dans la valeur assignée.
Méthode 1 : concaténation de base
Pour réunir deux valeurs, placez leurs expansions côte à côte et entourez-les de guillemets. Insérez le séparateur souhaité directement entre les guillemets :
string1="Hello"
string2="World"
result="$string1 $string2"
printf '%s\n' "$result"
Ici, result contient Hello World, car l’assignation insère un espace entre $string1 et $string2. Lorsque vous passez une valeur à une commande, entourez son expansion de guillemets, comme dans printf '%s\n' "$result" : les espaces et les caractères génériques restent ainsi dans la valeur, sans découpage en mots ni développement des chemins. Les accolades délimitent le nom d’une variable lorsque le texte qui suit pourrait être pris pour la suite de ce nom : "${string1}_suffix". Les variables Bash n’ont pas de type fixe chaîne ou entier ; une valeur qui ressemble à un nombre peut donc aussi être utilisée comme du texte, par exemple avec number=42, puis label="ID: $number".
Méthode 2 : utiliser l’opérateur +=
Utilisez += pour ajouter le texte situé à droite à la valeur actuelle d’une variable :
greeting="Hello"
greeting+=" World"
printf '%s\n' "$greeting"
L’espace au début de " World" fait partie du texte ajouté : greeting contient donc Hello World. L’opérateur += met à jour la même variable ; ici, il sert à ajouter du texte, et non à effectuer une addition arithmétique.
Méthode 3 : concaténer plusieurs chaînes
Des expansions protégées par des guillemets et des valeurs littérales placées côte à côte peuvent former une seule valeur. Insérez les séparateurs à l’endroit voulu :
first="Bash"
second="is"
third="great!"
combined="$first $second $third"
printf '%s\n' "$combined"
Les trois expansions sont réunies dans l’ordre, et les deux espaces écrits dans l’assignation servent de séparateurs. Si le format souhaité ne comporte pas d’espaces, omettez-les : Bash n’en ajoute pas automatiquement.
Méthode 4 : concaténer des chaînes dans une boucle
Ajoutez chaque élément à son tour. Cet exemple insère un espace entre les éléments et évite ainsi d’en ajouter un à la fin :
result=""
separator=""
for word in "Learning" "Bash" "is" "fun"
do
result+="${separator}${word}"
separator=" "
done
printf '%s\n' "$result"
Le premier élément est ajouté sans séparateur. Après chaque élément, separator vaut un espace : les éléments suivants sont donc séparés, et la valeur finale se termine par fun. Remplacez les mots entre guillemets par les valeurs de votre boucle. Entourez de guillemets les expansions susceptibles de contenir des espaces ou des caractères génériques du shell.
Méthode 5 : utiliser la substitution de commande
La substitution de commande, écrite $(...), exécute une commande et insère sa sortie standard dans l’assignation qui l’entoure :
name="John"
greeting="Hello, $(printf '%s' "$name")!"
printf '%s\n' "$greeting"
La sortie de la commande est insérée entre Hello, et !. La substitution de commande supprime les caractères de nouvelle ligne à la fin de cette sortie. Entourez de guillemets les valeurs utilisées dans la commande, puis la variable obtenue lorsque vous la passez comme argument.
Conclusion
Pour concaténer en Bash, placez des valeurs entre guillemets côte à côte, ajoutez explicitement les séparateurs ou utilisez += pour compléter une valeur existante. Une boucle peut répéter l’ajout, et $(...) permet d’insérer la sortie d’une commande. Lorsque vous passez des valeurs à des commandes, gardez leurs expansions entre guillemets afin que les espaces et les caractères génériques restent dans la valeur.
FAQ
-
Comment concaténer deux chaînes en Bash ?
Assignez des expansions côte à côte en les entourant de guillemets, par exemplecombined="${first}${second}", ou ajoutez-en une à l’autre aveccombined+="$second". Si le résultat doit contenir un espace, incluez-le dans le texte entre guillemets. -
Peut-on concaténer des chaînes dans une boucle ?
Oui. Ajoutez chaque élément à une variable de résultat avec+=; insérez délibérément un séparateur entre les éléments si la valeur assemblée en a besoin. -
Qu’est-ce que la substitution de commande en Bash ?
$(...)exécute une commande et insère sa sortie standard dans le texte qui l’entoure. Les caractères de nouvelle ligne à la fin de cette sortie sont supprimés. -
Comment connaître la longueur d’une chaîne ?
Utilisez${#value}pour obtenir la longueur de la valeur d’une variable Bash. Le comptage des caractères peut dépendre de la locale active ; dans la localeC, ce sont les octets qui sont comptés. -
Peut-on concaténer des chaînes contenant des caractères spéciaux ?
Oui. Les guillemets doubles préservent les espaces et empêchent le développement des caractères génériques dans les valeurs des variables. En revanche, des caractères de syntaxe du shell comme$, les accents graves (backticks) et les guillemets peuvent nécessiter des guillemets ou un échappement lorsqu’ils sont saisis littéralement. Pour du texte arbitraire, choisissez une forme de citation qui empêche le shell d’interpréter ses caractères avant l’assignation.