bash中##和%%的功能是什么?

时间:2015-07-02 07:29:41

标签: linux string bash

disk="/dev/sda"
local dev_node=${disk##*/}

dev_node分配了" sda"。

此外,

partition="/dev/sda3"
echo ${partition%%[0-9]*}

返回/ dev / sda并删除3.

我在上面的命令中没有理解## * /和%% [0-9] *的功能。我尝试搜索但无法获得足够的信息。

请解释并提供与此相关的教程的任何链接。

2 个答案:

答案 0 :(得分:3)

这是一个非常好的manual / tutorial。您的问题涉及什么:

  

$ {string ## substring}从前面中删除$ substring的最长匹配   $字符串。

  

$ {string %% substring}从返回中删除$ substring的最长匹配   $字符串。

应用于您的示例:从*/中删除与/dev/sda匹配的最长子字符串会导致sda

答案 1 :(得分:1)

此过程通常被描述为parameter expansion

在您的情况下,##%%是提取字符串部分的运算符。

##从给定字符串的开头删除已定义子字符串的最长匹配。

%%执行相同操作,但它从字符串后面开始。

好的指南是here