给出:
string="apple banana cherry"
如何在一个命令中使用##和%%展开来提取banana
?
我最接近的尝试是两个命令:
tmp=${string##*apple }
echo ${tmp%% cherry*}
banana
说明:就我而言,香蕉可能是banana23
,banana38
或其他数字后缀。
答案 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)
与|
内由(...)
分隔的字符串之一匹配