Ответ 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