Як отримати n
th-й позиційний аргумент у Bash, де n
є змінною?
Відповіді:
Використовуйте функцію опосередкування Баша:
#!/bin/bash
n=3
echo ${!n}
Запуск цього файлу:
$ ./ind apple banana cantaloupe dates
Виробляє:
cantaloupe
Редагувати:
Ви також можете нарізати масив:
echo ${@:$n:1}
але не індекси масиву:
echo ${@[n]} # WON'T WORK
Якщо N
збережено у змінній, використовуйте
eval echo \${$N}
якщо це постійне використання
echo ${12}
оскільки
echo $12
не означає те саме!
${12}
та $12
?
$12
означає $1
і персонаж 2
. ${12}
означає 12-й параметр.
Читайте
і
$ 0: перший позиційний параметр
$ 1 ... $ 9: елементи списку аргументів від 1 до 9
Як ви можете бачити в Bash by Example , вам просто потрібно використовувати автоматичні змінні $ 1, $ 2 тощо.
$ # використовується для отримання кількості аргументів.
${!n}
була відповідь, про яку я не знав, для запису.
@
(і*
) є "Спеціальними параметрами" і тому, що вони не є дійсними іменами масивів?${@}
робить посилання на пронумерованих параметри, але@
не є масив і підтримка не реалізована , щоб розібрати його , як такі, в той час як , наприклад , «${unsetvariable}
» вироблятиме порожній висновок , оскільки він є дійсним масивом / ім'ям змінним, просто ще не встановлена (і ці винятки спеціально обробляється у вихідному коді bash, я думаю). Я намагався знайти кращу причину вman bash
, але, шукаючи @, у мене закінчилося терпіння. ; P