我是一个shell脚本新手。我想知道
之间的区别${var%pattern}
和
${var%%pattern}
由于
答案 0 :(得分:2)
来自man bash
:
${parameter%word} ${parameter%%word}
扩展
word
以生成模式,就像在路径名扩展中一样。如果模式匹配扩展值parameter
的尾部部分,则扩展的结果是parameter
的扩展值,具有最短匹配模式(“%”情况)或最长匹配模式(“%%”案例)已删除。
以下是不同之处的示例:
$ VAR=abcdefabcdef
$ echo ${VAR%def*}
abcdefabc
$ echo ${VAR%%def*}
abc
请注意,def*
末尾的$VAR
有两种可能的匹配:“defabcdef”和“def”匹配。使用“%”删除模式def*
的最短匹配,因此删除尾随“def”。使用“%%”删除最长的匹配,因此“defabcdef”会咬住灰尘。
答案 1 :(得分:0)
来自man bash
:
${parameter%word} ${parameter%%word}
删除匹配的后缀模式。这个词扩展到了 产生一个与路径名一样的模式 扩张。如果模式 匹配扩展值的尾部 参数,然后是结果 扩张是扩大的价值 删除了最短匹配模式(
%'' case) or the longest matching pattern (the
%%''情况)的参数。 如果参数是@或*,则模式删除操作为 应用于每个位置参数 反过来,扩张是 结果清单。如果参数是数组变量 用@或*下标,模式 删除操作适用于 依次是数组的每个成员,而扩展是 结果清单。