如果布尔值为true,则添加一个选项(以破折号开头)

时间:2018-05-22 13:19:10

标签: bash

假设我有一个命令:

./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评论)。

1 个答案:

答案 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。否则,扩展会生成一个不带引号的空字符串,该字符串将从命令行中丢弃。