Linux: соответствие встроенной строки оболочки - PullRequest
1 голос
/ 30 апреля 2010

Я пытаюсь лучше познакомиться с использованием встроенных средств сопоставления строк, доступных в оболочках в linux. Я наткнулся на этого парня , отправившего , и он показал пример

a="abc|def"
echo ${a#*|}    # will yield "def"
echo ${a%|*}    # will yield "abc"

Я опробовал его, и он делает то, что его рекламирует, но я не понимаю, что делает $,{},#,*,|, я пытался найти какую-то ссылку в Интернете или в руководствах, но я не смог ничего найти. Может кто-нибудь объяснить мне, что здесь происходит?

Ответы [ 4 ]

3 голосов
/ 30 апреля 2010

В этой статье в журнале Linux говорится, что оператор # удаляет самое короткое совпадение слева, а оператор % удаляет самое короткое совпадение справа.

То есть ${a#*|} возвращает все после |, а ${a%|*} возвращает все до |.

Если бы у вас была ситуация, которая требовала жадного сопоставления, вы бы использовали ## или %%.

1 голос
/ 01 мая 2010

Эти и другие аналогичные полезные функции описаны в разделе Расширение параметров оболочки Справочного руководства Bash. Вот еще один действительно хороший справочник .

1 голос
/ 30 апреля 2010

Обычно $ {somename} подставляет содержимое определенного параметра:

mystring="1234567"
echo ${mystring}    # produces '1234567'

Символы% и # позволяют добавлять команды, которые изменяют поведение по умолчанию.

Звездочка '*' является подстановочным знаком; в то время как труба '|' это просто соответствующий символ. Позвольте мне сделать то же самое, используя соответствующий символ «4».

mystring="1234567"
echo ${mystring#*4}  # produces '567'
1 голос
/ 30 апреля 2010

Взгляните на это .

${string%substring}

Удаляет самое короткое совпадение $ substring от задней части $ string.

${string#substring}

Удаляет самое короткое совпадение $ substring спереди $ string.

EDIT:

Я не понимаю, что такое $, {}, #, *, | делают

Я рекомендую прочитать это

...