Bash 在构建字符串时测试变量的条件赋值

Bash conditional assignment that tests a variable whilst building a string

我在 bash 中找到了关于如何进行条件赋值的 this question,但我想要做的有点复杂,而且我似乎无法获得正确的语法.我的情况是测试一个变量,看它是否存在,输出连接成一个字符串。

这是我目前的情况:

fwversion="${BASH_REMATCH[1]}.$(( [[ BASH_REMATCH[2] ]] ? BASH_REMATCH[2] : 0 ))"

产生此错误消息的原因:

bash: line 41: [[ BASH_REMATCH[2] ]] ? BASH_REMATCH[2] : 0 : syntax error: 
operand expected (error token is "[[ BASH_REMATCH[2] ]] ? BASH_REMATCH[2] : 0 ")

这是我试图用 C++ 代码实现的目标:

std::string fwversion = BASH_REMATCH[1] + "." + ((BASH_REMATCH[2]) ? : BASH_REMATCH[2] : 0);

在 bash 中执行此操作的正确语法是什么?谢谢。

看来[[ ... ]]在算术表达式中无法理解。

我会这样做:

fwversion=${BASH_REMATCH[1]}
[[ ${BASH_REMATCH[2]} ]] && fwversion+=${BASH_REMATCH[2]} || fwversion+=0

[[ ${BASH_REMATCH[2]} ]] && ext=${BASH_REMATCH[2]} || ext=0
fwversion="${BASH_REMATCH[1]}.$ext"

转念一想,我根本不会那样做,我会利用 shell 的 parameter expansion

的力量
str="foo:bar"
if [[ $str =~ ^([a-z]+):([a-z]*)$ ]]; then
    echo "${BASH_REMATCH[1]}.${BASH_REMATCH[2]:-0}"
fi
foo.bar
str="foo:"
if [[ $str =~ ^([a-z]+):([a-z]*)$ ]]; then
    echo "${BASH_REMATCH[1]}.${BASH_REMATCH[2]:-0}"
fi
foo.0