Сьогодні я написав невеликий сценарій, який містив
grep -q ^local0 /etc/syslog.conf
Під час огляду колега запропонував ^local0
цитувати його, оскільки ^
означає «трубу» в оболонці Борна. Здивований цією претензією, я намагався відстежити будь-які посилання, які згадували про це. Ніщо, що я знайшов в Інтернеті, не підказувало, що це проблема.
Однак виявляється, що реалізація bsh
(яка претендує на оболонку Bourne) на AIX 7 насправді має таку поведінку:
> bsh
$ ls ^ wc
23 23 183
$ ls | wc
23 23 183
Жодна з інших реалізацій "Bourne shell", яку я намагався поводити таким чином (тобто ^
взагалі не вважається метахарактером оболонки). Я спробував як sh
на CentOS (який насправді є bash), так і sh
на FreeBSD (що не bash). У мене немає багатьох інших систем, щоб спробувати.
Чи очікується така поведінка? Які оболонки вважають ^
метахарактером труб?
[ x"$foo" = x"bar" ]
.
bsh
це не оболонка Борна. Ім'я зловживається лише для Bourne Shell лише в AIX. bsh
це скоріше оболонка, представлена мною у 1984 р. в H.Berhold AG на UNOS (перший клон UNIX). Зауважимо, що AIX не існував у 1984 році.
^
це символ заперечення в zsh, а також у просторі регулярних виразів. Як окремий коментар, як правило, рекомендується використовувати одиничні лапки у виразному вираженні для перенесення через оболонки.