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