Что означает синтаксис фигурных скобок $ {var%. *}? - PullRequest
16 голосов
/ 05 марта 2012

Я просматривал свой старый код и наткнулся на этот синтаксис:

extractDir="${downloadFileName%.*}-tmp"

Единственная информация, которую я нашел при поиске, относится к списку команд, но это только одна переменная. Что означает этот синтаксис фигурных скобок в bash?

Ответы [ 3 ]

30 голосов
/ 05 марта 2012

В этом контексте это подстановка параметров .

Обозначения ${variable%.*} означают, что принимают значение $variable, убирают шаблон .* с хвостазначение - мнемоника: процентT имеет «т» в хвосте - и дать результат.(Напротив, ${variable#xyz} означает удаление xyz из заголовка значения переменной - мнемоника: хэш имеет «h» в заголовке.)

Дано:

downloadFileName=abc.tar.gz

оценка extractDir="${downloadFileName%.*}-tmp" дает эквивалент:

extractDir="abc.tar-tmp"

Альтернативная запись с двойным %:

extractDir="${downloadFileName%%.*}-tmp"

даст эквивалент:

extractDir="abc-tmp"

%% означает удаление максимально длинного хвоста;соответственно, ## означает удаление самой длинной совпадающей головки.

5 голосов
/ 05 марта 2012
0 голосов
/ 05 марта 2012

Используется при развертывании переменной окружения рядом с некоторым текстом, который не является переменной, поэтому оболочка не включает все это в имя переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...