Hoy escribí un pequeño guión que contenía
grep -q ^local0 /etc/syslog.conf
Durante la revisión, un compañero de trabajo sugirió que ^local0
se citara porque ^
significa "tubería" en el shell Bourne. Sorprendido por esta afirmación, traté de localizar cualquier referencia que mencionara esto. Nada de lo que encontré en Internet sugirió que esto fuera un problema.
Sin embargo, resulta que la implementación de bsh
(que afirma ser el shell Bourne) en AIX 7 en realidad tiene este comportamiento:
> bsh
$ ls ^ wc
23 23 183
$ ls | wc
23 23 183
Ninguna de las otras implementaciones de "shell Bourne" que intenté se comporta de esta manera (es decir, ^
no se considera un metacarácter de shell en absoluto). Intenté sh
en CentOS (que es realmente bash) y sh
en FreeBSD (que no es bash). No tengo muchos otros sistemas para probar.
¿Se espera este comportamiento? ¿Qué proyectiles consideran ^
un metacarácter de tubería?
[ x"$foo" = x"bar" ]
.
bsh
No es el Bourne Shell. Se abusa del nombre de Bourne Shell solo en AIX. bsh
es más bien un shell introducido por mí en 1984 en H.Berhold AG en UNOS (el primer clon de UNIX). Tenga en cuenta que AIX no existía en 1984.
^
es un personaje de negación en zsh y también en el espacio regex. Como comentario separado, generalmente se recomienda usar comillas simples en la expresión grep para la portabilidad entre shells.