On Sun, Sep 29, 2019 at 01:18:01AM +0300, Dmitry Alexandrov wrote: > Eugene Berdnikov <b...@protva.ru> wrote: > > On Sat, Sep 28, 2019 at 11:24:18PM +0300, Victor Wagner wrote: > >> buitin, не builtin синтаксически это все равно команда с параметрами. > > > > Синтаксически символ [ не является alphanumeric, поэтому он является не > > нормальным именем команды, а нелепым исключением. > > Почему? Тут вам не Винда, из запретных для файловых имен символов — кажется, > только нулевой.
Потому что символ [ ещё является одним из спецсимволов для file globbing, и если написать, например, [a-z] то сначала Баш попытается раскрыть это выражение, подобрав из текущего каталога файлы "a", "b" ... "z", и только если это не удастся, пойдёт искать файл "[a-z]" по каталогам в PATH. Да, в случае одиночного [ глоббинг не случится, потому что такой шаблон синтаксически неправилен, но вместо того, чтобы выдать сообщение об ошибке в шаблоне, классический борновский шелл пойдёт искать бинарий по PATH. Всё это контринтиутивно. Обычный человек, выросший в нашей современной культуре программирования, склонен воспринимать [ ... ] как часть синтаксиса, а не думать постоянно о тонкостях трактовки параметров со множеством неочевидных "волчьих ям" (piffalls). Короче, Bourne shell это тяжкий груз наследственности. > > Перечитал это раз пять, но ниасилил, увы... :) > > Имеется в виду Bash Pitfall № 9 по Вулиджу [0]. > > [0] https://mywiki.wooledge.org/BashPitfalls#if_.5Bgrep_foo_myfile.5D Спасибо. Да, читается как медицинская карта тяжелобольного. -- Eugene Berdnikov