В результате подстановки шаблона получается список слов. К этим словам оператор добавляет порядковые номера и выводит весь набор в стандартный поток ошибок (
Этот оператор полезен для создания нумерованных пунктов меню. Например, у меня в каталоге ~/temp
есть три файла: proto.txt
, file.txt
и README
. В листинге 8.3. приведен фрагмент сценария, позволяющего быстро просмотреть любой из них.
Листинг 8.3. Пример использования оператора select
echo "Выберите файл для просмотра:"
select file in ~/temp/* Quit;
do
if [ -f $file ]; then cat $file;
else break;
fi
done
Запустив этот сценарий, я увижу на экране:
Выберите файл для просмотра:
1) /home/den/temp/file.txt
2) /home/den/temp/proto.txt
3) /home/den/temp/README
4) Quit
#?
Последняя строка — это приглашение, устанавливаемое переменной окружения PS3.
8.5. Условная подстановка параметров
Условная подстановка позволяет проверить, установлен ли определенный параметр, или использовать вместо его значения другое. Значение самого параметра при этом не изменяется. Допустимые виды условных подстановок перечислены в таблице 8.4.
Условная подстановка Таблица 8.4
Конструкция | Выполняет подстановку |
---|---|
${параметр:-строка} | Значение по умолчанию. Если параметр имеет непустое значение, то подставляется оно, иначе — указанная строка |
${параметр:=строка} | Присваивание значения по умолчанию. Если параметр не имеет непустого значений, то ему присваивается «строка», после чего значение подставляется. Конструкция допустима только для переменных оболочки |
${параметр:?сообщение} | Ошибка, если пусто. Если параметр не имеет непустого значения, то выводится указанное сообщение. Сообщение можно опустить, тогда будет выведено стандартное сообщение |
${параметр:+строка} | Дополнительное значение. Если параметр имеет непустое значение, подставляется «строка», иначе — пустая строка |
${параметр#шаблон} | Подставляется значение параметра, в котором из головной части удален наименьший фрагмент, удовлетворяющий шаблону |
${параметр##шаблон} | Подставляется значение параметра, в котором из головной части удален наибольший фрагмент, удовлетворяющий шаблону |
${параметр%шаблон} | Подставляется значение параметра, в котором из хвостовой части удален наименьший фрагмент, удовлетворяющий шаблону |
${параметр%%шаблон} | Подставляется значение параметра, в котором из хвостовой части удален наибольший фрагмент, удовлетворяющий шаблону |
${#параметр} | Если параметр есть * или @, подставляется количество позиционных параметров, иначе — длина значения параметра в байтах |