[Comm] Вопрос по bash

Sergey Vlasov =?iso-8859-1?q?vsu_=CE=C1_altlinux=2Eru?=
Пн Май 3 21:47:02 MSD 2004


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.
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/community/attachments/20040503/66db2b75/attachment-0003.bin>


Подробная информация о списке рассылки community