纯bash:通过在一个命令中结合##和%%来提取子字符串?

时间:2019-03-08 19:42:59

标签: bash

给出:

string="apple banana cherry"

如何在一个命令中使用##和%%展开来提取banana

我最接近的尝试是两个命令:

tmp=${string##*apple }
echo ${tmp%% cherry*}
banana

说明:就我而言,香蕉可能是banana23banana38或其他数字后缀。

2 个答案:

答案 0 :(得分:1)

#%无法合并。您可以使用正则表达式匹配

[[ $string =~ apple\ (.*)\ cherry ]]
echo ${BASH_REMATCH[1]}

或分配给数组并选择第二个元素:

fruits=($string)
echo ${fruits[1]}

您还可以使用set填充位置参数

echo $(set -- $string ; echo $2)

答案 1 :(得分:1)

您可以使用extglob

shopt -s extglob

string="apple banana cherry"
echo "${string//@(apple | cherry)/}"

banana

这里的表达式@(apple | cherry)|内由(...)分隔的字符串之一匹配