2010-03-21 145 views
1

匹配下面是一个例子,以获得一个文件名格局猛砸

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  

的不同部分我想知道什么呢##%,并在图案的意思。如何匹配工作?

感谢和问候!

回答

4

的联机帮助页bash说:

$ {参数#字}
$ {参数##字}

删除匹配前缀模式。该单词被扩展为在路径名扩展中产生一个模式,如 。如果模式与参数值的开头匹配,则扩展结果为参数的扩展值,其中最短匹配模式(#)或最长匹配模式( ##)被删除。如果参数是@*,模式删除操作依次应用于每个位置参数 ,并且扩展是由此产生的 列表。如果参数是以@*为下标的数组变量,则将删除操作依次应用于数组的每个成员,并将扩展 作为结果列表。

$ {参数%字}
$ {参数%%字}

删除匹配的后缀模式。该单词被扩展为在路径名扩展中产生一个模式,如 。如果模式与扩展的参数值 的尾部相匹配,则扩展结果是 参数的扩展值,其中最短匹配模式(%)或最长匹配模式(%%)被删除。如果参数是@*,则将依次对每个位置参数应用模式删除 操作,扩展操作为 结果列表。如果参数是一个以@*为下标的数组变量,则会依次将 模式删除操作应用于数组的每个成员,并且 扩展是结果列表。

2

参见http://tldp.org/LDP/abs/html/string-manipulation.html

  • ${string##substring}
    • 删除从$字符串前面的子串$最长匹配。
  • ${string%substring}
    • 删除从$字符串后面的子串$最短的匹配。
+2

而对于 '#'(散列)助记符是 '头',并为 '%'(百分比)助记符是 '尾巴'。 – 2010-03-21 18:48:10

+3

而且,在美国的英文QWERTY键盘上,“#”是“$”的*左边*,“%”是“$”的*右边*。 – 2010-03-21 19:22:20