Вы можете попробовать
java -jar compiler.jar ${externs:+--externs} "${externs:-}" --foo "another" --bar "more"
описание, от bash документы
${parameter:-word}
Use Default Values. If parameter is unset or null, the expansion of word is substituted. Otherwise, the value of parameter is sub‐
stituted.
${parameter:+word}
Use Alternate Value. If parameter is null or unset, nothing is substituted, otherwise the expansion of word is substituted.
Вы могли бы попробовать себя с:
externs="some value"
printf '%s\n' ${externs:+--externs} "${externs:-}"
выход
--externs
некоторое значение
Примечание: Я использовал printf
здесь проверить случай $externs
, содержащий несколько слов, в которых, если процитировать не применяется после расширения переменной, результат будет выглядеть как
--externs
некоторые
стоимость
Поэтому я считаю, что этого должно быть достаточно.
externs=
echo ${externs:+--externs} "${externs:-}"
выход: ноль
Я предполагаю, что это в контексте сценария? – miken32
Да, это в большом скрипте. Еще одна возможность, которую я пытаюсь избежать, - это просто повторить команду в двух ветвях. Это становится волосатым, если есть несколько разных команд, которые нужно опустить. Я думал, что может быть какая-то команда подстановки строк, которая привела к тому, что bash даже не вставлял аргумент. Но я еще не нашел его, если он существует. –
как об этом: http://stackoverflow.com/questions/14763608/use-conditional-in-bash-script-to-check-string-argument – EmilyR