Подтвердить что ты не робот

Что означает синтаксис фигурных скобок $ {var%. *}?

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

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

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

4b9b3361

Ответ 1

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

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

Дано:

downloadFileName=abc.tar.gz

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

extractDir="abc.tar-tmp"

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

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

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

extractDir="abc-tmp"

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

Ответ 3

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