Я знаю о различных возможностях обработки строк удара.
Кроме того, я знаю, что могу выйти из специальных символов образца с обратной косой чертой \
.
Например:
# 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.
Есть ли в ударе что-то вроде этого?
А, я понял это сразу после публикации.
Ответ (как всегда): добавьте больше цитат (:
Для моего примера:
prefix="foo*"
... later, in some faraway code ...
x="foo*bar"
# Prints 'bar' since the pattern has double-quotes surrounding it.
echo "${x##"$prefix"}"