<Попередній | зміст | Наступна>
shift – отримання доступу до багатьох аргументів
Але що станеться, якщо ми даємо програмі велику кількість аргументів, наприклад:

[me@linuxbox ~]$ позиційний параметр *
Кількість аргументів: 82
$0 = /home/me/bin/posit-param
$1 = адреси.ldif
2 долари = ящик
$3 = bookmarks.html
$4 = debian-500-i386-netinst.iso
$5 = debian-500-i386-netinst.jigdo
$6 = debian-500-i386-netinst.template
$7 = debian-cd_info.tar.gz
8 доларів = робочий стіл
$9 = dirlist-bin.txt
8 доларів = робочий стіл
$9 = dirlist-bin.txt
У цьому прикладі системи підстановка * розширюється на 82 аргументи. Як ми можемо обробити таку кількість? Оболонка надає спосіб, хоча і незграбний, щоб зробити це. The зсув Команда змушує всі параметри «переміщатися на один раз вниз» щоразу, коли вона виконується. Фактично, використовуючи зсув, можна обійтися лише одним параметром (на додаток до $0, який ніколи не змінюється):
#! / бін / баш
# posit-param2: скрипт для відображення всіх аргументів count=1
в той час як [[ $# -gt 0 ]]; робити
echo "Аргумент $count = $1" count=$((лічильник + 1))
зміна виконана
#! / бін / баш
# posit-param2: скрипт для відображення всіх аргументів count=1
в той час як [[ $# -gt 0 ]]; робити
echo "Аргумент $count = $1" count=$((лічильник + 1))
зміна виконана
Щоразу зсув виконується, значення $2 переміщено до $1, значення $3 переміщено до $2 і так далі. Значення $# також зменшується на одиницю.
Перейдіть на вкладку позиційний параметр2 програмі ми створюємо цикл, який оцінює кількість аргументів, що залишилися, і продовжується до тих пір, поки є хоча б один. Виводимо поточний аргумент, збільшуємо змінну вважати з кожною ітерацією циклу, щоб забезпечити поточний підрахунок кількості оброблених аргументів і, нарешті, виконати зсув завантажувати
$1 з наступним аргументом. Ось програма на роботі:
[me@linuxbox ~]$ posit-param2 abcd
Аргумент 1 = a Аргумент 2 = b Аргумент 3 = c Аргумент 4 = d
[me@linuxbox ~]$ posit-param2 abcd
Аргумент 1 = a Аргумент 2 = b Аргумент 3 = c Аргумент 4 = d
документація