Bash中的模式匹配
下面是一个获取文件名不同部分的示例Bash中的模式匹配,bash,pattern-matching,Bash,Pattern Matching,下面是一个获取文件名不同部分的示例 bash-3.2$ pathandfile=/tmp/ff.txt bash-3.2$ filename=$(basename $pathandfile) bash-3.2$ echo $filename ff.txt bash-3.2$ echo ${filename##*.} txt bash-3.2$ echo ${filename%.*} ff 我想知道模式中的##和%是什么意思。模式匹配如何
bash-3.2$ pathandfile=/tmp/ff.txt
bash-3.2$ filename=$(basename $pathandfile)
bash-3.2$ echo $filename
ff.txt
bash-3.2$ echo ${filename##*.}
txt
bash-3.2$ echo ${filename%.*}
ff
我想知道模式中的##和%是什么意思。模式匹配如何运作
谢谢和问候 见
${string##substring}
- 从$string前面删除最长匹配的$substring
${string%substring}
- 从$string后面删除$substring的最短匹配项
bash
的手册页显示:
${parameter#word}${parameter##word} 删除匹配的前缀模式。该单词被展开以生成一个模式,就像 在路径名扩展中。如果模式与参数值的开头匹配,则展开的结果是参数的展开值,并带有 最短匹配模式(小写)或最长匹配模式(小写)
##
案例)已删除。如果参数为@
或*
,则模式删除操作将被禁用
依次应用于每个位置参数,展开即为结果
列表如果参数是以@
或*
下标的数组变量,则模式
移除操作依次应用于阵列的每个成员,扩展
是结果列表
${参数%word}${parameter%%word} 删除匹配的后缀模式。该单词被展开以生成一个模式,就像 在路径名扩展中。如果模式与展开的 参数的值,则展开的结果是 删除了具有最短匹配模式(
%%
案例)或最长匹配模式(%%
案例)的参数。如果参数为@
或*
,则模式删除
操作依次应用于每个位置参数,展开式是
结果列表。如果参数是以@
或*
下标的数组变量,则
阵列移除操作依次应用于阵列的每个成员,并且
展开是结果列表
“#”的助记符(hash)是“head”,而“%”(percenT)的助记符是“tail”。在美国英语qwerty键盘上,“#”在“$”的左边,“%”在“$”的*右边。关于
*
:换句话说,如果上述方法不起作用,记得在前缀或后缀中使用*
,因为#
和%%
将只查找精确匹配。