Онлайн-рабочие станции OnWorks Linux и Windows

Логотип

Бесплатный хостинг в Интернете для рабочих станций

<Предыдущая | Содержание: | Следующая>

Обработка позиционных параметров Массово

Иногда бывает полезно управлять всеми позиционными параметрами как группой. Например, мы можем захотеть написать «обертку» для другой программы. Это означает, что мы создаем сценарий или функцию оболочки, упрощающую вызов другой программы. В этом случае оболочка предоставляет список загадочных параметров командной строки, а затем передает список аргументов программе нижнего уровня.

Для этой цели оболочка предоставляет два специальных параметра. Оба они расширяются до полного списка позиционных параметров, но отличаются довольно тонкими чертами. Они есть:


Таблица 32-1: Специальные параметры * и @


Параметр Описание

Параметр Описание

$* Раскрывается в список позиционных параметров, начиная с 1. Если он заключен в двойные кавычки, он раскрывается в строку с двойными кавычками, содержащую все позиционные параметры, каждый из которых разделен первым символом переменной оболочки IFS (по умолчанию пробел характер).


изображение

$@ Расширяется до списка позиционных параметров, начиная с 1. Если он заключен в двойные кавычки, он разворачивает каждый позиционный параметр в отдельное слово, заключенное в двойные кавычки.


изображение


Вот скрипт, который показывает эти специальные параметры в действии:

Обработка позиционных параметров в массовом порядке


#! / Bin / Баш

# posit-params3: скрипт для демонстрации $* и $@ print_params () {

echo "\$1 = $1" echo "\$2 = $2" echo "\$3 = $3" echo "\$4 = $4"

}


pass_params () {

echo -e "\n" '$* :'; print_params $* echo -e "\n" '"$*" :'; print_params "$*" echo -e "\n" '$@ :'; print_params $@ echo -e "\n" '"$@" :'; print_params "$@"

}


pass_params "слово" "слова с пробелами"

#! / Bin / Баш

# posit-params3: скрипт для демонстрации $* и $@ print_params () {

echo "\$1 = $1" echo "\$2 = $2" echo "\$3 = $3" echo "\$4 = $4"

}


pass_params () {

echo -e "\n" '$* :'; print_params $* echo -e "\n" '"$*" :'; print_params "$*" echo -e "\n" '$@ :'; print_params $@ echo -e "\n" '"$@" :'; print_params "$@"

}


pass_params "слово" "слова с пробелами"


В этой довольно запутанной программе мы создаем два аргумента: «слово» и «слова с пробелами» и передаем их в функцию. pass_params функция. Эта функция, в свою очередь, передает их в print_params функция, используя каждый из четырех методов, доступных со специальными параметрами $* и $@. При выполнении скрипт выявляет различия:


изображение

[я @ linuxbox ~] $ posit-param3


$* :


$1

=

слово

$2

=

слова

$3

=

$4

=

пространства

"$*" :


$1

=

слова слова с пробелами

$2

=

$3

=

$4

=

$@ :


$1

=

слово

$2

=

слова

$3

=

$4

=

пространства

"$@" :

$1 = слово


$2 = слова с пробелами

3 долларов =

4 долларов =

$2 = слова с пробелами

3 долларов =

4 долларов =


С нашими аргументами оба $* и $@ выведите результат из четырех слов:

слова слова с пробелами

«$*» дает результат из одного слова:

"слова с пробелами"

«$@» выдает результат из двух слов:

"слово" "слова с пробелами"

что соответствует нашему фактическому намерению. Урок, который можно извлечь из этого, заключается в том, что, хотя оболочка предоставляет четыре разных способа получения списка позиционных параметров,$@", безусловно, наиболее полезен в большинстве ситуаций, поскольку сохраняет целостность каждого позиционного параметра.


Лучшие облачные вычисления для ОС в OnWorks: