【发布时间】:2016-03-12 17:04:41
【问题描述】:
我有一个很长的命令,我想在某种情况下修改它以包含或不包含选项。
例如
java -jar compiler.jar --externs "$externs"
--foo "another" --bar "more"
如果$externs 为空,我希望完全省略--externs "$externs"。有没有办法在 bash 中做到这一点,而无需使用字符串构建整个命令?
【问题讨论】:
-
我认为这是在脚本的上下文中?
-
是的,它在一个更大的脚本中。我试图避免的另一种可能性是简单地在两个 if 分支中重复该命令。如果有一些不同的命令需要省略,那会变得很麻烦。我在想可能有一些字符串替换命令导致 bash 甚至没有插入参数。但我还没有找到它,如果它存在的话。
-
顺便说一下,这是 BashFAQ #50 的子问题 3:mywiki.wooledge.org/BashFAQ/…
-
@miken32,在我回答您的澄清请求之前,您删除了您的答案。检查
externs='two words'; if [ ! -z "$externs" ]; then externs_option="--externs \"$externs\""; fi; printf '%q\n' java -jar compiler.jar $externs_option --foo "two words" --bar "etc"的输出——并比较与--externs一起传递的two words和与--foo一起传递的--foo。
标签: bash command-line-arguments