S’il n’y avait que ça qui soit piégeux en shell...
Par exemple, tu peux utiliser cut pour récupérer un champ ; tu peux aussi utiliser sort pour trier selon un champ.
Avec cut, -f indique le champ (« field » en anglais), -d le délimiteur.
Tu te dirais qu’avec sort, ce serait pareil.
Eh bien non ! Avec sort, -k indique le champ selon lequel on trie — la clé (« key ») de tri, c’est incohérent, mais ça a un sens — et -t indique le délimiteur — et là, le sens, on le cherche...
Et il y a d’autres sources d’« amusement » :
$ [ -z $bidon ] && echo oui
oui
$ [ $bidon = "" ] && echo oui
bash: [: = : opérateur unaire attendu
Il fallait écrire [ "$bidon" = "" ], parce que le shell commence par faire une expansion de variables et ensuite analyse la chaîne de caractères résultante, et à ce stade, ce qu’il voit, c’est [ = "" ] ; curieusement, -z est robuste à ce problème.
« Le fascisme c’est la gangrène, à Washington comme en Russie. » — adapté de Renaud, Hexagone
[^] # Pièges du shell
Posté par Arthur Accroc . En réponse au journal Les cgroups, un outil trop méconnu. Évalué à 5.
S’il n’y avait que ça qui soit piégeux en shell...
Par exemple, tu peux utiliser
cutpour récupérer un champ ; tu peux aussi utilisersortpour trier selon un champ.Avec
cut,-findique le champ (« field » en anglais),-dle délimiteur.Tu te dirais qu’avec sort, ce serait pareil.
Eh bien non ! Avec sort,
-kindique le champ selon lequel on trie — la clé (« key ») de tri, c’est incohérent, mais ça a un sens — et-tindique le délimiteur — et là, le sens, on le cherche...Et il y a d’autres sources d’« amusement » :
$ [ -z $bidon ] && echo oui
oui
$ [ $bidon = "" ] && echo oui
bash: [: = : opérateur unaire attendu
Il fallait écrire
[ "$bidon" = "" ], parce que le shell commence par faire une expansion de variables et ensuite analyse la chaîne de caractères résultante, et à ce stade, ce qu’il voit, c’est[ = "" ]; curieusement,-zest robuste à ce problème.« Le fascisme c’est la gangrène, à Washington comme en Russie. » — adapté de Renaud, Hexagone