Substitution de variables

De Linuxmemo.

sources: http://casteyde.christian.free.fr/system/linux/guide/online/x3679.html

Sommaire

[modifier] valeur par défaut

valeur par défaut pour le cas où cette variable ne contient rien ou n'est pas définie

${variable:-valeur}

Notez que la variable reste indéfinie après la substitution.

Pour fixer la valeur de la variable à cette valeur par défaut en plus d'effectuer la substitution

${variable:=valeur}

[modifier] message d'erreur

un message d'erreur plutôt que de donner une valeur par défaut lorsqu'une variable n'est pas définie.

${variable:?message}

[modifier] tester

tester si une variable est non définie et renvoyer une valeur spécifique si elle est définie

${variable:+valeur}

où valeur est la valeur à renvoyer si la variable est définie. Si la variable n'est pas définie, la substitution sera faite avec la chaîne de caractères vide (l'expression complète sera donc supprimée).

[modifier] position:longueur

${variable:position:longueur}

où position est la position à laquelle commence la sous-chaîne à extraire, et longueur est le nombre de caractères à extraire.

la présence du champ longueur est facultative. La sous-chaîne extraite sera constituée du reste de la valeur de la variable à partir de la position indiquée.

${variable:position}

La position quant à elle doit être positive ou nulle. Une valeur négative indique un point de départ correspondant au nombre de caractères correspondant à partir de la droite de la valeur de la variable.

[modifier] longueur d'une chaîne de caractères contenue dans une variable

Si l'on veut obtenir la longueur d'une chaîne de caractères contenue dans une variable, on utilisera cette syntaxe :

${#variable}

[modifier] suppression de préfixe

${variable#préfixe}
lorsqu'on désire supprimer le plus petit préfixe possible correspondant au motif.

ou :

${variable##préfixe}
permettra de supprimer le préfixe le plus long.

où variable est la variable contenant la chaîne de caractères à traiter, et préfixe est le préfixe à supprimer.

Par exemple, si la variable VAR contient la chaîne de caractères abbbc, la commande suivante :

echo ${VAR#a*b}

affichera la chaîne de caractères bbc, car le plus petit préfixe correspondant au motif a*b est ab. Inversement, la commande :

echo ${VAR##a*b}

utilisera le préfixe le plus long, à savoir abbb. Le résultat de cette substitution sera donc la chaîne de caractères c.

[modifier] extraction des suffixes

${variable%suffixe}
lorsqu'on désire supprimer le plus petit suffixe possible correspondant au motif.

ou :

${variable%%suffixe}
permettra de supprimer le préfixe le plus long.

où variable est la variable contenant la chaîne de caractères à traiter, et suffixe est le suffixe à supprimer.

Par exemple, si la variable VAR contient la chaîne de caractères abbbc, la commande suivante :

echo ${VAR%b*c}

affichera la chaîne de caractères abb, alors que la commande :

echo ${VAR%%b*c}

n'affichera que a.

[modifier] recherche, remplacement, suppression

recherche et de remplacement du shell dans les chaînes de caractères contenues dans des variables

${variable/motif/remplacement}

Ce remplacement n'est donc effectué qu'une seule fois. Si l'on veut que toutes les occurrences du motif soient remplacées par la chaîne de remplacement, il suffit de doubler le premier / :

${variable//motif/remplacement}

la présence du champ remplacement est facultative. Cela permet de supprimer purement et simplement les sous-chaînes de caractères qui correspondent au motif.

${variable/motif}

[modifier] Astuces

convertir des fichiers audio:

for i in $(ls *.m4a);do avconv -i $i ${i/.m4a/.mp3} ; done

changer l’extension de fichiers

for i in *.txt ; do mv $i ${i/%.txt/.doc} ; done
Outils personnels