Bash : guillemets et expansions
L'ordre des expansions du shell, les trois protections, le découpage en mots, les formes ${v:-d}, ${v%m} et ${v##m} et le document en ligne : prévoir les arguments que reçoit une commande.
- 28 cartes
- 5 thèmes
- Gratuit
Le programme, thème par thème
Le poids de chaque thème suit celui que lui donne l'examen.
- Notions
- Questions
- Ranger et relier
- Mises en situation
- Comprendre
Quelques cartes du deck
Expansion : de quoi s'agit-il ?
Voir la réponse
Transformation que le shell applique à la ligne de commande avant de lancer le programme : accolades, tilde, variables, commandes, calcul, découpage en mots, jokers.
Le programme ne voit jamais
*ni$HOME: il reçoit le résultat. Ce n'est paslsqui remplace*.txt, c'est le shell, avant d'appelerls.Qu'affiche ce script ?
```bash
f="mon rapport.txt"
set -- $f "$f"
echo $#`3214
Voir la réponse
3$fsans guillemets est coupé en deux mots (monetrapport.txt),"$f"n'en fait qu'un : 2 + 1 = 3 arguments.Parmi les expansions, le shell traite d'abord les …, puis le tilde et les variables, ensuite le …, et enfin les jokers.
Voir la réponse
Parmi les expansions, le shell traite d'abord les accolades, puis le tilde et les variables, ensuite le découpage en mots, et enfin les jokers.
echo {a,b}{1,2}donnea1 a2 b1 b2: les accolades sont développées avant tout le reste, même avant les variables. Les jokers viennent en dernier, sur les mots déjà découpés.Protection : de quoi s'agit-il ?
Voir la réponse
Marque qui retire à un caractère son sens spécial pour le shell : guillemets simples, guillemets doubles ou barre oblique inverse.
Les guillemets simples empêchent toute expansion ; les doubles laissent passer
$et\; la barre oblique protège le seul caractère suivant.Un script de nettoyage lance
rm $fichieravecfichier="mon fichier"et afficherm: cannot remove 'mon': No such file or directorypuisrm: cannot remove 'fichier': No such file or directory. Quelle correction est juste ?rm '$fichier'rm -f $fichierrm "$fichier"rm ${fichier}
Voir la réponse
rm "$fichier"Les guillemets doubles gardent le contenu de la variable en un seul argument. Les simples empêcheraient l'expansion (
rmrecevrait le texte$fichier),-fn'ajoute qu'un silence sur les erreurs, et les accolades ne protègent rien du découpage.