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 ] проверяет именно на пустую строку. Кстати, эта конструкция содержит ошибку - условие выполнится не только при установленной опции i (для interactive shell), но и в том случае, когда в $- пустая строка (не установлена ни одна опция). Нужно либо добавлять && [ -n "$-" ], либо написать вместо этого case.