ShellScript:%和%%之间的区别是什么?

时间:2009-07-03 04:55:22

标签: bash shell

我是一个shell脚本新手。我想知道

之间的区别
${var%pattern}

${var%%pattern}

由于

2 个答案:

答案 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 %%''情况)的参数。                 如果参数是@或*,则模式删除操作为   应用于每个位置参数   反过来,扩张是                 结果清单。如果参数是数组变量   用@或*下标,模式   删除操作适用于                 依次是数组的每个成员,而扩展是   结果清单。