假设我有一个命令:
./my_program --option1 --option2 --option3
如果布尔变量为真而没有多次写--option3
,有没有办法使用./my_program --option1 --option2
?
我试过了:
use_option3=1 # or 0
option3=""
if [[ $use_option3 == 1 ]]; then
option3="--option3"
fi
./my_program --option1 --option2 "$option3"
但是当$use_option
设置为0
时,它不起作用,因为./my_program
收到一个空参数(参见Biffen评论)。
答案 0 :(得分:1)
在bash
中,最简单的方法是在单个数组中收集所有所需的参数。
opts=(--option1 --option2)
if [[ $use_option3 == 1 ]]; then
opts+=(--option3)
fi
./my_program "${opts[@]}"
脆弱的方法也可行。只要该选项仅包含字母数字字符(保守但合理的假设),您就可以使用${var:+word}
扩展运算符
./my_program --option1 --option2 ${use_option3:+--option3}
如果use_option3
任何非空值,则展开会生成--option3
。否则,扩展会生成一个不带引号的空字符串,该字符串将从命令行中丢弃。