格局猛砸
问题描述:
匹配下面是一个例子,以获得一个文件名格局猛砸
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
说:
$ {参数#字}
$ {参数##字}删除匹配前缀模式。该单词被扩展为在路径名扩展中产生一个模式,如 。如果模式与参数值的开头匹配,则扩展结果为参数的扩展值,其中最短匹配模式(
#
)或最长匹配模式(##
)被删除。如果参数是@
或*
,模式删除操作依次应用于每个位置参数 ,并且扩展是由此产生的 列表。如果参数是以@
或*
为下标的数组变量,则将删除操作依次应用于数组的每个成员,并将扩展 作为结果列表。$ {参数%字}
$ {参数%%字}删除匹配的后缀模式。该单词被扩展为在路径名扩展中产生一个模式,如 。如果模式与扩展的参数值 的尾部相匹配,则扩展结果是 参数的扩展值,其中最短匹配模式(
%
)或最长匹配模式(%%
)被删除。如果参数是@
或*
,则将依次对每个位置参数应用模式删除 操作,扩展操作为 结果列表。如果参数是一个以@
或*
为下标的数组变量,则会依次将 模式删除操作应用于数组的每个成员,并且 扩展是结果列表。
答
参见http://tldp.org/LDP/abs/html/string-manipulation.html。
${string##substring}
- 删除从$字符串前面的子串$最长匹配。
${string%substring}
- 删除从$字符串后面的子串$最短的匹配。
答
从http://tldp.org/LDP/abs/html/string-manipulation.html:
$ {串##串}
删除从$字符串前面的子串$最长匹配。
和
$ {字符串%子}
删除从$字符串后面的子串$最短的匹配。
而对于 '#'(散列)助记符是 '头',并为 '%'(百分比)助记符是 '尾巴'。 – 2010-03-21 18:48:10
而且,在美国的英文QWERTY键盘上,“#”是“$”的*左边*,“%”是“$”的*右边*。 – 2010-03-21 19:22:20