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