在bash脚本中,当t =“ hello.txt”都
${t %%.txt}和${t%.txt}返回“ hello”
${t ## *.}也是一样,${t#*.}返回“ txt”.
它们之间有区别吗?它们如何工作?
解决方法:
简而言之,%%尽可能多地去除,%尽可能少地去除.
# t="hello.world.txt"
# echo ${t%.*}
hello.world
# echo ${t%%.*}
hello
从bash手册中:
'${PARAMETER%WORD}'
'${PARAMETER%%WORD}'
The WORD is expanded to produce a pattern just as in filename
expansion. If the pattern matches a trailing portion of the
expanded value of PARAMETER, then the result of the expansion is
the value of PARAMETER with the shortest matching pattern (the '%'
case) or the longest matching pattern (the '%%' case) deleted. If
PARAMETER is '@' or '*', the pattern removal operation is applied
to each positional parameter in turn, and the expansion is the
resultant list. If PARAMETER is an array variable subscripted with
'@' or '*', the pattern removal operation is applied to each member
of the array in turn, and the expansion is the resultant list.
标签:bash,shell,scripting,linux
来源: https://codeday.me/bug/20191109/2010871.html