удар: Что-то как quotemeta () для символов образца?

Фон

Я знаю о различных возможностях обработки строк удара.

Кроме того, я знаю, что могу выйти из специальных символов образца с обратной косой чертой \.

Например:

# 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\*}"

Проблема

Вышеупомянутое все великолепно. Проблема состоит в том, когда шаблон входит от где-то в другом месте, и это не может иметь * и оставляют других специальных globbing символов.

Например:

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}"

По существу я ищу что-то аналогичное функции quotemeta Perl.

Есть ли в ударе что-то вроде этого?

1
задан 30 December 2014 в 21:02
1 ответ

А, я понял это сразу после публикации.

Ответ (как всегда): добавьте больше цитат (:

Для моего примера:

prefix="foo*"

... later, in some faraway code ...

x="foo*bar"

# Prints 'bar' since the pattern has double-quotes surrounding it.
echo "${x##"$prefix"}"
2
ответ дан 3 December 2019 в 21:07

Теги

Похожие вопросы