[email protected], когда индекс является переменной? - программирование" />

BASH scripting: n-й параметр [email protected], когда индекс является переменной?

Я хочу получить n-й параметр [email protected](список параметров командной строки, переданных в script), где n хранится в переменной.

Я пробовал ${$ n}.

Например, я хочу получить второй параметр командной строки для вызова:

./my_script.sh alpha beta gamma

И индекс не должен быть явным, но храниться в переменной n.

Исходник:

n=2
echo ${$n}

Я ожидаю, что результат будет "бета", но я получаю сообщение об ошибке:

./my_script.sh: line 2: ${$n}: bad substitution

Что я делаю неправильно?

Ответ 1

Попробуйте следующее:

#!/bin/bash
args=("[email protected]")
echo ${args[1]}

okay замените "1" на некоторые $n или что-то в этом роде.

Ответ 2

Вы можете использовать переменную косвенность. Он не зависит от массивов и отлично работает в вашем примере:

n=2
echo "${!n}"

Изменить: Переменная Направление может использоваться во многих ситуациях. Если есть переменная foobar, то следующие два разложения переменных дают один и тот же результат:

$foobar

name=foobar
${!name}

Ответ 3

Также выполняются следующие действия:

#!/bin/bash
n=2
echo ${@:$n:1}

Ответ 4

Переносное (не-w50 > конкретное) решение

$ set a b c d
$ n=2
$ eval echo \${$n}
b

Ответ 5

eval может помочь вам косвенным образом получить доступ к переменной, что означает дважды оценить выражение.

Вы можете сделать это следующим образом: eval alph=\$$n; echo $alph