2013-05-28 26 views
2

有没有一种很好的方法来解释下面的工作方式?

~$ echo $test 
en.to.tre 
~$ echo ${test} 
en.to.tre 
~$ echo ${test%.*} 
en.to 
~$ echo ${test%%.*} 
en 
~$ echo ${test#*.} 
to.tre 
~$ echo ${test##*.} 
tre 

我特别不明白为什么.*有删除/左/右保持时被交换。

+2

你可以选择这个:[wooledge.org - 如何使用参数扩展?我怎样才能得到子字符串?我怎样才能得到没有扩展名的文件,或只得到一个文件的扩展名?](http://mywiki.wooledge.org/BashFAQ/073) – fedorqui

+4

也许你也可以查看:http://tldp.org/LDP/abs /html/refcards.html#AEN22664 – devnull

回答

4

.*表示“substring starting with .”; *.表示“子串结束.”。 在第三行和第四行中,从最后删除起始与.的最短/最长子字符串;在第五行和第六行中,您将从最开始删除最短/最长的子字符串结尾.

#,%等之后的字符串被解释为通配模式(如文件名),而不是正则表达式,因此.代表自身。

相关问题