Что означает $* в скрипте оболочки?

Что означает $* в скрипте оболочки?

В файле скрипта оболочки я увидел «$*». Что это значит и когда это нужно использовать?

решение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.

ваше здоровье

подкожно.

Связанный контент