[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