背景

背景

背景

我知道 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"}"

相关内容