以下是获取文件名不同部分的示例
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
我想知道##和%在模式中意味着什么。 patten匹配如何工作?
谢谢和问候!
答案 0 :(得分:5)
bash
的联机帮助页说:
$ {参数#字}
$ {参数##字}删除匹配的前缀模式。扩展单词以生成模式 在路径名扩展中。如果模式匹配参数值的开头,则扩展的结果是带参数的扩展值 最短匹配模式(
#
情况)或最长匹配模式(##
案例)已删除。如果参数为@
或*
,则模式删除操作为 依次应用于每个位置参数,并且扩展是结果 名单。如果参数是使用@
或*
下标的数组变量,则为模式 删除操作依次应用于数组的每个成员,并进行扩展 是结果清单。$ {参数%字}
$ {parameter %% word}删除匹配的后缀模式。扩展单词以生成模式 在路径名扩展中。如果模式匹配展开的尾部 参数值,则扩展的结果是扩展值 删除最短匹配模式(
%
情况)或最长匹配模式(%%
情况)的参数。如果参数为@
或*
,则删除模式 操作依次应用于每个位置参数,扩展为 结果清单。如果参数是使用@
或*
下标的数组变量,则 模式删除操作依次应用于数组的每个成员 扩展是最终的清单。
答案 1 :(得分:3)
来自http://tldp.org/LDP/abs/html/string-manipulation.html:
$ {串##串}
从$ string前面删除$ substring的最长匹配。
和
$ {字符串%子}
从$ string后面删除$ substring的最短匹配。
答案 2 :(得分:2)
请参阅http://tldp.org/LDP/abs/html/string-manipulation.html。
${string##substring}
- 从$ string前面删除$ substring的最长匹配。
${string%substring}
- 从$ string后面删除$ substring的最短匹配。