Oggi ho scritto una piccola sceneggiatura che conteneva
grep -q ^local0 /etc/syslog.conf
Durante la revisione, un collega ha suggerito di ^local0
essere citato perché ^
significa "pipe" nella shell Bourne. Sorpreso da questa affermazione, ho cercato di rintracciare qualsiasi riferimento che menzionasse questo. Nulla di ciò che ho trovato su Internet ha suggerito che questo fosse un problema.
Tuttavia, si scopre che l'implementazione di bsh
(che afferma di essere la shell Bourne) su AIX 7 ha effettivamente questo comportamento:
> bsh
$ ls ^ wc
23 23 183
$ ls | wc
23 23 183
Nessuna delle altre implementazioni "Bourne shell" che ho provato si comporta in questo modo (ovvero, ^
non è affatto considerata un metacarattere shell). Ho provato sh
su CentOS (che è davvero bash) e sh
su FreeBSD (che non è bash). Non ho molti altri sistemi da provare.
Questo comportamento è previsto? Quali conchiglie considerano ^
un metacarattere pipe?
[ x"$foo" = x"bar" ]
.
bsh
non è la Bourne Shell. Il nome viene abusato solo per Bourne Shell su AIX. bsh
è piuttosto una shell introdotta da me nel 1984 presso H.Berhold AG su UNOS (il primo clone UNIX). Si noti che AIX non esisteva nel 1984.
^
è un carattere di negazione in zsh e anche nello spazio regex. Come commento separato, si consiglia generalmente di utilizzare virgolette singole nell'espressione grep per la portabilità tra shell.