В файле скрипта оболочки я увидел «$*». Что это значит и когда это нужно использовать?
решение1
Отbash(1)
…
Специальные параметры
Оболочка обрабатывает несколько параметров особым образом. На эти параметры можно только ссылаться; присваивание им не допускается.
*
Расширяется до позиционных параметров, начиная с единицы. Когда расширение происходит в двойных кавычках, оно расширяется до одного слова со значением каждого параметра, разделенным первым символом специальнойIFS
переменной. То есть,"$*"
эквивалентно"$1c$2c…"
, где c — первый символ значения переменнойIFS
. ЕслиIFS
не установлено, параметры разделяются пробелами. ЕслиIFS
равно null, параметры объединяются без промежуточных разделителей.
@
Расширяется до позиционных параметров, начиная с единицы. Когда расширение происходит в двойных кавычках, каждый параметр расширяется до отдельного слова. То есть"$@"
эквивалентно"$1" "$2" …
. Если расширение в двойных кавычках происходит внутри слова, расширение первого параметра объединяется с начальной частью исходного слова, а расширение последнего параметра объединяется с последней частью исходного слова. Когда позиционных параметров нет,"$@"
и$@
расширяются до ничего (т. е. они удаляются).
По сути, $*
это специальная переменная, значением которой являются параметры скрипта (или функции оболочки). В большинстве случаев "$@"
более уместно.
решение2
Это соответствует всем параметрам, переданным скрипту. В вашем примере он заключен в кавычки; это важно, поскольку кавычки инкапсулируют (предположительно) пробелы между параметрами. Пропуск кавычек в скриптах оболочки часто может быть источником ошибок.
Вот, в случае bash, взято из man-страницы:
* Expands to the positional parameters, starting from one. When the expansion occurs
within double quotes, it expands to a single word with the value of each parameter
separated by the first character of the IFS special variable. That is, "$*" is
equivalent to "$1c$2c...", where c is the first character of the value of the IFS
variable. If IFS is unset, the parameters are separated by spaces. If IFS is null,
the parameters are joined without intervening separators.
ваше здоровье
подкожно.