【发布时间】:2020-07-26 22:25:02
【问题描述】:
我当前的代码:
while read -r rbv_line || [[ -n "$rbv_line" ]]; do
if [[ "${rbv_line}" =~ ${rbv_reg} ]]; then
rbv_downcase="${BASH_REMATCH[0],,}" &&
ruby_version="${rbv_downcase//[^0-9a-z\.\-]/}" &&
((reg_matches="${reg_matches}"+1))
printf "\n"
printf "Setting Ruby version: %s\n" "${ruby_version}"
break
fi
done < "${1}"
它做我想做的事。但我很想知道我是否可以进一步简化这段代码,希望有人能帮助我理解语法。
如果你看到这两行:
rbv_downcase="${BASH_REMATCH[0],,}" &&
ruby_version="${rbv_downcase//[^0-9a-z\.\-]/}" &&
最初我尝试使用以下方法将它们组合成一个:
ruby_version="${BASH_REMATCH[0],,//[^0-9a-z\.\-]/}"
这行不通。
有没有办法将这两个参数扩展(,, 和 //[^0-9a-z\.\-]/)结合起来,或者通过中间变量传递它是正确的方法?
您可以在此处查看最新版本的代码: https://github.com/octopusnz/scripts
【问题讨论】:
-
您不能像这样组合多个替换。如果我们知道输入和预期输出是什么,我们也许可以找到一种更简单的方法来提取它。
-
你应该给出输入样本和预期输出。
标签: bash shell variables refactoring simplify