shell 编程中 read i y=${i%%,*} echo "$y" 输出是变量i的值。 问下。后面的%%,*有什么用?

如题所述

举例说明吧,如下,这个就是说把变量内容进行扩展解释,%%,*就是把第一个,号之前的数据拿出来,而%,*就是把最后一个,之前的数据拿出来:
y:root:/tmp>i="abc,def,ghi,jlk"
y:root:/tmp>echo ${i%%,*}
abc
y:root:/tmp>echo ${i%,*}
abc,def,ghi

你可对应参考${i##*,}, ${i#*,}来加深理解
温馨提示:答案为网友推荐,仅供参考
第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的参数扩展的详细讲解。
相似回答