Substitution de variables

De Linuxmemo.

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

Sommaire

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}

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}

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).

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.

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}

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.

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.

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}

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