Что означает ${0%/*} в скрипте bash?

Я пытаюсь понять тестовый скрипт, который включает в себя следующий сегмент:

SCRIPT_PATH=${0%/*}
if [ "$0" != "$SCRIPT_PATH" ] && [ "$SCRIPT_PATH" != "" ]; then 
    cd $SCRIPT_PATH
fi

Что это ${0%/*} стоять за? Спасибо

1 ответ

Решение

Это называется Parameter Expansion, Взгляните на эту страницу и остальную часть сайта.

Какие ${0%/*} делает это, это расширяет значение, содержащееся в аргументе 0 (который является путем, который вызвал скрипт) после удаления строки /* суффикс с конца.

Так, $0 такой же как ${0} который похож на любой другой аргумент, например. $1 который вы можете написать как ${1}, Как я сказал $0 является особенным, поскольку это не настоящий аргумент, он всегда присутствует и представляет имя сценария. Расширение параметра работает в пределах {} - фигурные скобки, и % это один из типов расширения параметров.

%/* соответствует последнему вхождению / и удаляет что угодно (* значит что угодно) после этого персонажа. Взгляните на этот простой пример:

$ var="foo/bar/baz"
$ echo "$var"
foo/bar/baz
$ echo "${var}"
foo/bar/baz
$ echo "${var%/*}"
foo/bar
Другие вопросы по тегам