背景
我知道 bash 的各种字符串操作能力。
另外,我知道我可以用反斜杠转义特殊模式字符\
。
例如:
# x is a literal string 'foo*bar'
x="foo*bar"
# prints "*bar".
echo "${x##foo}"
# prints nothing, since the '*' is interpreted as a glob.
echo "${x##foo*}"
# prints "bar", since I escaped the '*'.
echo "${x##foo\*}"
问题
以上都很好。问题是当模式来自其他地方时,它可能没有*
转义和其他特殊通配符。
例如:
prefix="foo*"
... later, in some faraway code ...
x="foo*bar"
# I want this to print 'bar'. So I want the '*' to be escaped. But how?
echo "${x##$prefix}"
本质上,我正在寻找类似于 Perl 的东西quotemeta功能。
bash 中有类似的东西吗?
答案1
啊,我发帖后就明白了这一点。
答案(一如既往)是:添加更多引号(:
以我为例:
prefix="foo*"
... later, in some faraway code ...
x="foo*bar"
# Prints 'bar' since the pattern has double-quotes surrounding it.
echo "${x##"$prefix"}"