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
我在 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