这种论证解析是什么?
$RES="${SOME_VAR##foo/}"
答案1
${SOME_VAR##foo/}
-巴什变量替换。
foo/
它从字符串的开头(变量的值)搜索与模式的匹配SOME_VAR
,并截断包括模式的左侧部分。
例子:
s="foo/some#foo#textfoo/textlast"
echo ${s##foo/}
some#foo#textfoo/textlast
笔记,这${s##foo/}
相当于,因为它只搜索从字符串开头${s#foo/}
第一次出现的模式。foo/
虽然这${s##*foo/}
会截断左侧部分,直到最后的匹配模式(含)
echo ${s##*foo/}
textlast
答案2
根据man bash
:
参数扩展
“$”字符引入参数扩展、命令替换或算术扩展。要扩展的参数名称或符号可以用大括号括起来,大括号是可选的,但用于保护要扩展的变量免受紧随其后的字符的影响,这些字符可能被解释为名称的一部分。${参数#word}
${参数##字}
删除匹配的前缀模式。
该单词被扩展以产生一个模式,就像路径名扩展一样。如果模式与参数值的开头匹配,则扩展的结果是具有最短匹配模式(“#”情况)或最长匹配模式(“##”)的参数扩展值' 案例)已删除。如果参数是@或*,则依次对每个位置参数应用模式删除操作,并且扩展是结果列表。如果parameter是下标为@或*的数组变量,则模式删除操作将依次应用于数组的每个成员,并且扩展是结果列表。