Як обробити більше 10 параметрів в оболонці


101

Я використовую bash shell на Linux і хочу використовувати більше 10 параметрів у скрипті оболонки


8
Зауважте, що наявність 10 параметрів зробить це досить заплутаним. Можливо, було б краще використовувати замість цього варіанти (наприклад, -a 1або --foo=bar). Дивіться man getopt, man getoptsі man bashдеякі варіанти для цього.
Мікель

Відповіді:


158

Використовуйте фігурні брекети, щоб відключити їх:

echo "${10}"

Ви також можете повторити такі позиційні параметри:

for arg

або

for arg in "$@"

або

while (( $# > 0 ))    # or [ $# -gt 0 ]
do
    echo "$1"
    shift
done

2
Зауважте, що $ {10} буде працювати в bash, але обмежить вашу портативність, оскільки багато реалізацій sh дозволяють лише одноцифрові специфікації.
Вільям Перселл

1
@William: Є кілька оболонок, які не приймуть його, наприклад, оригінальна застаріла оболонка Борна, але крім оболонок, які я вказала в іншому коментарі (Bash, dash, ksh і zsh), вона також працює в csh, tcsh і зола Busybox.
Призупинено до подальшого повідомлення.

1
@WilliamPursell ${10}визначений POSIX
Стівен Пенні

2
Турбуватися про ${10}роботу потрібно лише при використанні дуже старих реалізацій, які не відповідають стандартам. Напевно, має лише історичний інтерес ... і все ж я ще ніколи його не використовував! Я гадаю, тому що найкраща практика диктує, що 10 аргументів - це занадто багато, якщо вони не повторюються, і в цьому випадку ви переймете їх, "$@"а не перерахуєте їх.
Вільям Перселл

22

Ви можете мати до 256 параметрів від 0 до 255 за допомогою:

${255}

5
Я думаю, що ця межа залежить від оболонки. Bash, dash, ksh та zsh, схоже, цього не мають. sh -c 'echo ${333}' /usr/bin/*
Призупинено до подальшого повідомлення.

3
Моя оболонка зручно сягає до 2 мільйонівset $(seq 2097152); echo ${2097152}
Стівен Пенні
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.