Что делает $ {0% / *} в сценариях оболочки?

Извините, если это глупый вопрос, но я искал его безуспешно.

Что делает именно вторая строка?:

#!/bin/sh
cd ${0%/*} || exit 1

Я знаю, что первая - это шебанг, вторая пытается сменить каталог, но сбивающая с толку часть - ${0%/*}.

Не могли бы вы объяснить мне эту вторую строку?

17
задан 7 January 2018 в 03:43

1 ответ

${0} первый аргумент сценария, т.е. название сценария или путь. Если Вы запускаете свой сценарий как path/to/script.sh, затем ${0} будет точно что строка: path/to/script.sh.

%/* часть изменяет значение ${0}. Это означает: возьмите все символы до / сопровождаемый именем файла. В примере выше, ${0%/*} будет path/to.

Вы видите его в действии с Вашей оболочкой:

$ x=path/to/script.sh
$ echo "${x%/*}"
path/to

Sh поддерживает много других видов "замены параметра". Вот, например, как взять имя файла вместо пути:

$ echo "${x##*/}"
script.sh

В целом, % и %% суффиксы полосы, в то время как # и ## префиксы полосы. Можно читать больше о замене параметра.

27
ответ дан 7 January 2018 в 03:43

Другие вопросы по тегам:

Похожие вопросы: