Як отримати nth-й позиційний аргумент у 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