Квазипеременные в скриптах
Прочитал об интересной особенности shell - квазипеременных. Это такая переменная, результирующее значение которой зависит от некоторого условия.
Вот примеры таких переменных:
| Формат | Описание |
|---|---|
${VAR:-expression} |
Если VAR существует и не пустая, возвращается ее значение, иначе - возвращается значение выражения expression |
${VAR:=expression} |
Если VAR существует и не пустая, возвращается ее значение, иначе - VAR устанавливается в значение expression и возвращается expression |
${VAR:?expression} |
Если VAR существует и не пустая, возвращается ее значение, иначе - в stderr выводится значение expression и работа завершается с не нулевым кодом |
${VAR:+expression} |
Если VAR существует и не пустая, пустое значение, иначе - вращается значение expression |
${#VAR} |
Возвращается длина значения VAR |
Любопытный пример использования квазипеременных - компактная конструкция switch:
f1() {
echo "function 1"; echo $@
}
f2() {
echo "function 2"; echo $@
}
help() {
echo "help"
}
ARGS=$@
${1:-help}
Здесь, при запуске скрипта без аргументов, будет вызвана функция help. Если будет указан аргумент, будет предпринята попытка вызова функции с таким же именем. Если такой функции нет, то будет предпринята попытка запуска команды с таким же именем. В противном случае будет выведено стандартное сообщение об ошибке.