Napisałem dzisiaj mały skrypt, który zawierał
grep -q ^local0 /etc/syslog.conf
Podczas przeglądu współpracownik zasugerował, aby ^local0
go zacytować, ponieważ ^
oznacza „fajkę” w powłoce Bourne'a. Zaskoczony tym twierdzeniem, próbowałem wyśledzić wszelkie odniesienia, które o tym wspominały. Nic, co znalazłem w Internecie, nie sugerowało, że to był problem.
Okazuje się jednak, że implementacja bsh
(która twierdzi, że jest powłoką Bourne'a) w systemie AIX 7 faktycznie ma takie zachowanie:
> bsh
$ ls ^ wc
23 23 183
$ ls | wc
23 23 183
Żadna z innych implementacji „powłoki Bourne'a”, które próbowałem, nie zachowuje się w ten sposób (to ^
znaczy wcale nie jest uważana za metaznak powłoki). Próbowałem sh
na CentOS (który jest naprawdę bash) i sh
na FreeBSD (który nie jest bash). Nie mam wielu innych systemów do wypróbowania.
Czy to zachowanie jest oczekiwane? Które pociski uważają ^
za metaznak rury?
[ x"$foo" = x"bar" ]
.
bsh
to nie jest Bourne Shell. Nazwa jest nadużywana tylko dla powłoki Bourne Shell tylko w systemie AIX. bsh
jest raczej powłoką wprowadzoną przeze mnie w 1984 r. w H.Berhold AG na UNOS (pierwszy klon UNIX). Zauważ, że AIX nie istniał w 1984 roku.
^
to znak negacji w Zsh, a także w przestrzeni wyrażeń regularnych. W ramach oddzielnego komentarza zaleca się stosowanie pojedynczych cudzysłowów w wyrażeniu grep w celu przenoszenia między powłokami.