Условие загрузки в строке выполнения в Bash

Условие загрузки в строке выполнения в Bash

Я хочу выполнить команду с опцией, которая зависит от атрибута переменной. Если переменная установлена, загрузить опцию со значением, но если нет, не загружать эту опцию. Вот что у меня есть:

if [ -n "$variable" ]
  then command ... -option $variable
  else command ...
fi

Идея состоит в том, чтобы объединить это в одну команду с условием внутри, чтобы мне не приходилось повторять другие параметры команды дважды.

Большое спасибо за ваше время.

решение1

Использование массивов bash:

opts=()
[ "$variable" ] && opts+=(-option "$variable")
command ... "${opts[@]}"

Поскольку здесь используются массивы bash, это будет работать даже при $variableналичии пробелов или других сложных символов.

Как это работает

  • opts=()

    Это создает пустой массив с именем opts.

  • [ "$variable" ] && opts+=(-option "$variable")

    Если $variableне пусто, то добавляем -optionи $variableк массиву opts.

  • command ... "${opts[@]}"

    Это выполняет вашу команду. Если optsнепусто, то ее элементы добавляются к команде. Если optsпусто, то ничего не добавляется: это было бы так, как если бы "${opts[@]}"его вообще не было.

решение2

Затем возьмите вашу команду и сделайте ее функцией, например:

function command_function () {
  command ... -option $variable
}

if [ -n "$variable" ]
  then command_function ... -option $variable
  else command_function ...
fi

Просто чтобы вы знали, скобки в функции Bash ничего не передают.

решение3

С использованиемБашзамена (Расширение параметров оболочки) для краткого, но читабельного синтаксиса:

$ echo ${variable:+-option $variable}

$ variable=yes
$ echo ${variable:+-option $variable}
-option yes

решение4

Подойдет следующий однострочный текст:

[ x"$VARIABLE" = x ] && echo UNSET || echo SET

Это проверяет, является ли переменнаяx"$ПЕРЕМЕННАЯ"равноИкс, другими словами, если$ПЕРЕМЕННАЯпусто; если тест пройден, то первый вариант (эхо ОТКЛЮЧЕНО) выполняется, если тестнетудовлетворен последний вариант выполнен (эхо SET). Если вы не хотите ничего делать во втором случае, вы можете сделать

[ x"$VARIABLE" = x ] && echo UNSET || :

Это значительно проще других решений, позволяет оценить условие только один раз, устойчиво к появлению странных символов в ПЕРЕМЕННОЙ.

Связанный контент