У меня есть целая куча тестов на переменные в сценарии оболочки bash (3.00), где, если переменная не установлена, то она назначает значение по умолчанию, например:
if [ -z "${VARIABLE}" ]; then
FOO='default'
else
FOO=${VARIABLE}
fi
Кажется, я помню, что в одной строке есть некоторый синтаксис, напоминающий троичный оператор, например:
FOO=${ ${VARIABLE} : 'default' }
(хотя я знаю, что это не сработает ...)
Я сумасшедший или что-то подобное существует?
Ответы:
Очень близко к тому, что вы опубликовали, на самом деле:
Или, что присвоит
default
кVARIABLE
а:источник
Для аргументов командной строки:
который присваивает
VARIABLE
значение 1-го аргумента, переданного сценарию, или значение,DEFAULTVALUE
если такой аргумент не был передан.источник
Если переменная такая же, то
назначает DEFAULT_VALUE для VARIABLE, если не определено. Двойные кавычки предотвращают сбои и разбиение слов.
Также см. Раздел 3.5.3 « Расширение параметров оболочки» в руководстве по Bash.
источник
HISTTIMEFORMAT
: ${FOO:=DEFAULT1} ${BAR:=DEFAULT2}
Даже вы можете использовать как значение по умолчанию значение другой переменной
имея файл
defvalue.sh
запустить
./defvalue.sh first-value second-value
выводи запустить
./defvalue.sh first-value
выводисточник
смотрите здесь под 3.5.3 (расширение параметров оболочки)
так в вашем случае
источник
Ответить на ваш вопрос и по всем заменам переменных
источник
FWIW, вы можете предоставить сообщение об ошибке, например, так:
Это отображает сообщение как это и выходит с кодом 1:
Более полный пример всего:
Вывод:
$ACTION
принимает значение первого аргумента и выходит, если пуст$DIRNAME
является вторым аргументом, и по умолчанию используется текущий каталог$OUTPUT_DIR
является третьим аргументом, или$HOMEDIR
(если они определены), иначе,/tmp
. Это работает на OS X, но я не уверен, что он переносим.источник
Тогда есть способ выразить вашу конструкцию «если» более кратко:
источник
Вот пример
сохраните это как script.sh и сделайте его исполняемым. запустить без параметров
запустить его с параметром
источник