[Comm] Вопрос по bash
Arcady V. Ivanov
=?iso-8859-1?q?arc_=CE=C1_help0=2Eru?=
Вт Май 4 03:36:53 MSD 2004
Sergey Vlasov пишет:
>On Mon, May 03, 2004 at 02:30:07PM +1300, Arcady V. Ivanov wrote:
>
>
>>Вот тут разглядываю конструкцию в /etc/bashrc и не могу въехать:
>>---------------------
>># Are we an interactive shell?
>>if [ -z "${-##*i*}" ]; then
>>---------------------
>>
>>${-##*i*} - что означает и в каких случаях этот if срабатывает.
>>
>>
>
>Переменная $- содержит набор установленных опций shell (см. описание
>set builtin в man bash). Конструкция ${NAME##PATTERN} раскрывается в
>значение $NAME, в котором из начала удалена подстрока максимально
>возможной длины, соответствующая шаблону PATTERN. Т.е. в данном
>случае, если в $- не содержалась буква i, в результате получится
>исходное значение $-; если содержалась - получится пустая строка;
>далее [ -z STR ] проверяет именно на пустую строку.
>
>
Спасибо. Теперь понял, что "-" это переменная.
И наконец-то прочитал об этом в описании bash :-) .
>Кстати, эта конструкция содержит ошибку - условие выполнится не только
>при установленной опции i (для interactive shell), но и в том случае,
>когда в $- пустая строка (не установлена ни одна опция). Нужно либо
>добавлять && [ -n "$-" ], либо написать вместо этого case.
>
Эта строка, кстати, из /etc/bashrc Master 2.2
--
Sincerely yours. Arcady. http://www.help0.ru
---------------------------------
Linux forever! No alternatives!!!
Подробная информация о списке рассылки community