Tim*_*Tim 2 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
Run Code Online (Sandbox Code Playgroud)
我想知道##和%在模式中意味着什么.patten匹配如何工作?
感谢致敬!
联机帮助页bash说:
$ {parameter#word}
$ {parameter ## word}删除匹配的前缀模式. 这个词被扩展为产生一个模式,就像路径名扩展一样.如果模式匹配参数值的开头,则扩展的结果是参数的扩展值,其中最短匹配模式(
#大小写)或最长匹配模式(##大小写)被删除.如果参数是@或*,则模式移除操作依次应用于每个位置参数,并且扩展是结果列表.如果参数是使用@or 下标的数组变量*,则模式删除操作依次应用于数组的每个成员,并且扩展是结果列表.$ {parameter%word}
$ {parameter %% word}删除匹配的后缀模式. 这个词被扩展为产生一个模式,就像路径名扩展一样.如果模式匹配参数的扩展值的尾部,则扩展的结果是具有最短匹配模式(
%情况)或最长匹配模式(%%情况)被删除的参数的扩展值.如果参数是@或*,则模式移除操作依次应用于每个位置参数,并且扩展是结果列表.如果参数是使用@or 下标的数组变量*,则模式删除操作依次应用于数组的每个成员,并且扩展是结果列表.
| 归档时间: |
|
| 查看次数: |
4671 次 |
| 最近记录: |