Книга: Искусство программирования на языке сценариев командной оболочки

Пример 9-6. arglist: Вывод списка аргументов с помощью переменных $* и $@

Пример 9-6. arglist: Вывод списка аргументов с помощью переменных $* и $@

#!/bin/bash

# Вызовите сценарий с несколькими аргументами, например: "один два три".

E_BADARGS=65

if [ ! -n "$1" ]

then

echo "Порядок использования: `basename $0` argument1 argument2 и т.д."

exit $E_BADARGS

fi

echo

index=1

echo "Список аргументов в переменной "$*":"

for arg in "$*" # Работает некорректно, если "$*" не ограничена кавычками.

do

echo "Аргумент #$index = $arg"

let "index+=1"

done # $* воспринимает все аргументы как одну строку.

echo "Полный список аргументов выглядит как одна строка."

echo

index=1

echo "Список аргументов в переменной "$@":"

for arg in "$@"

do

echo "Аргумент #$index = $arg"

let "index+=1"

done # $@ воспринимает аргументы как отдельные строки (слова).

echo "Список аргументов выглядит как набор различных строк (слов)."

echo

exit 0

После команды shift (сдвиг), первый аргумент, в переменной $@, теряется, а остальные сдвигаются на одну позицию "вниз" (или "влево", если хотите).

#!/bin/bash

# Вызовите сценарий в таком виде: ./scriptname 1 2 3 4 5

echo "$@" # 1 2 3 4 5

shift

echo "$@" # 2 3 4 5

shift

echo "$@" # 3 4 5

# Каждая из команд "shift" приводит к потере аргумента $1,

# но остальные аргументы остаются в "$@".

Специальная переменная $@ может быть использована для выбора типа ввода в сценария. Команда cat "$@" позволяет выполнять ввод как со стандартного устройства ввода stdin, так и из файла, имя которого передается сценарию из командной строки. См. Пример 12-17 и Пример 12-18.


Переменные $* и $@, в отдельных случаях, могут содержать противоречивую информацию! Это зависит от содержимого переменной $IFS.

Оглавление книги


Генерация: 3.700. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз