В чем смысл ${0%/*} в bash script?

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

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

Что означает ${0%/*}? Благодаря

Ответ 1

Он называется Parameter Expansion. Посмотрите эту страницу и остальную часть сайта.

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

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

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

$ var="foo/bar/baz"
$ echo "$var"
foo/bar/baz
$ echo "${var}"
foo/bar/baz
$ echo "${var%/*}"
foo/bar