J'ai écrit aujourd'hui un petit script qui contenait
grep -q ^local0 /etc/syslog.conf
Au cours de l'examen, un collègue a suggéré de ^local0
le citer parce qu'il ^
signifie «pipe» dans le shell Bourne. Surpris par cette affirmation, j'ai essayé de retrouver toute référence qui en faisait mention. Rien de ce que j'ai trouvé sur Internet ne suggérait que c'était un problème.
Cependant, il s'avère que l'implémentation de bsh
(qui prétend être le shell Bourne) sur AIX 7 a en fait ce comportement:
> bsh
$ ls ^ wc
23 23 183
$ ls | wc
23 23 183
Aucune des autres implémentations de "Bourne shell" que j'ai essayées ne se comporte de cette façon (c'est-à-dire qu'elle ^
n'est pas du tout considérée comme un métacaractère de shell). J'ai essayé sh
sur CentOS (qui est vraiment bash) et sh
sur FreeBSD (qui n'est pas bash). Je n'ai pas beaucoup d'autres systèmes à essayer.
Ce comportement est-il attendu? Quels coquilles considèrent ^
comme un métacaractère de tuyau?
[ x"$foo" = x"bar" ]
.
bsh
ce n'est pas le Bourne Shell. Le nom est utilisé abusivement pour le Bourne Shell sur AIX uniquement. bsh
est plutôt un shell introduit par moi en 1984 chez H.Berhold AG sous UNOS (le premier clone UNIX). Notez qu'AIX n'existait pas en 1984.
^
c'est un caractère de négation dans zsh et aussi dans l'espace regex. Comme commentaire séparé, il est généralement conseillé d'utiliser des guillemets simples dans l'expression grep pour la portabilité entre les shells.