第1个回答 2011-11-29
这个是shell扩展中的问题:
${参数%单词}
${参数%%单词}
单词被扩展成一个模式,就像文件名扩展一样。如果这个模式与参数扩展后的值开始部分匹配,则替换的结果是该模式与参数扩展后的值最短的匹配部分 (用%) 或者最长的匹配部分(指%%) 删除以后的字符串。如果参数是(*)或(@),则模式删除操作就对位置参数依次进行,扩展的结果就是所得到的位置参数列表。如果参数是带有下标(*)或(@)的数组名,则模式删除操作就对数
组元素依次进行,扩展的结果就是所得到的数组元素列表。
例子:
qunero@qunero-Ubuntu-desktop ~
$ read i
abc ab, 123 12, 1
qunero@qunero-Ubuntu-desktop ~
$ echo $i
abc ab, 123 12, 1
qunero@qunero-Ubuntu-desktop ~
$ y=${i%%,*}
qunero@qunero-Ubuntu-desktop ~
$ echo $y
abc ab
#说明,上面用的%%,所以从最后倒数到ab后面的逗号的地方都被删除了。
qunero@qunero-Ubuntu-desktop ~
$ echo $i
abc ab, 123 12, 1
qunero@qunero-Ubuntu-desktop ~
$ x=${i%,*}
qunero@qunero-Ubuntu-desktop ~
$ echo $x
abc ab, 123 12
#说明,上面用的%,所以从最后倒数到12后面的逗号的地方被删除了。
qunero@qunero-Ubuntu-desktop ~
$ echo $i
abc ab, 123 12, 1
请参考书籍《bash中文文档》,P17的参数扩展的详细讲解。