Используя sed:
$ echo "$string" | sed -e "s/^$prefix//" -e "s/$suffix$//"
o-wor
Внутри команды sed ^
символ совпадает с текстом, начинающимся с $prefix
, а завершающий $
текст совпадает с текстом, заканчивающимся на $suffix
.
Адриан Фрювирт делает несколько хороших замечаний в комментариях ниже, но sed
для этого может быть очень полезным. Тот факт, что содержимое префикса $ и суффикса $ интерпретируется с помощью sed, может быть либо хорошим, либо плохим - если вы обращаете внимание, у вас все должно быть в порядке. Прелесть в том, что вы можете сделать что-то вроде этого:
$ prefix='^.*ll'
$ suffix='ld$'
$ echo "$string" | sed -e "s/^$prefix//" -e "s/$suffix$//"
o-wor
что может быть тем, что вам нужно, и одновременно и более изощренно, и мощнее, чем подстановка переменных в bash. Если вы помните, что с большой силой приходит большая ответственность (как говорит Человек-Паук), у вас все будет хорошо.
Краткое введение в sed можно найти по адресу http://evc-cit.info/cit052/sed_tutorial.html.
Примечание относительно оболочки и ее использования строк:
Для конкретного приведенного примера также будет работать следующее:
$ echo $string | sed -e s/^$prefix// -e s/$suffix$//
... но только потому, что:
- echo не волнует, сколько строк в его списке аргументов, и
- В префиксе $ и в суффиксе $ нет пробелов
Обычно рекомендуется заключать в кавычки строку в командной строке, поскольку, даже если она содержит пробелы, она будет представлена команде как один аргумент. Мы заключаем в кавычки префикс $ и суффикс $ по одной и той же причине: каждая команда редактирования для sed будет передаваться как одна строка. Мы используем двойные кавычки, потому что они допускают интерполяцию переменных; если бы мы использовали одинарные кавычки, команда sed получила бы литерал, $prefix
и $suffix
это, конечно, не то, что мы хотели.
Обратите внимание также на мое использование одинарных кавычек при установке переменных prefix
и suffix
. Мы, конечно, не хотим, чтобы что-либо в строках интерпретировалось, поэтому мы заключаем их в одинарные кавычки, чтобы не происходила интерполяция. Опять же, в этом примере это может не понадобиться, но это очень хорошая привычка.