Ответ 1
Попробуйте следующее:
#!/bin/bash
args=("[email protected]")
echo ${args[1]}
okay замените "1" на некоторые $n или что-то в этом роде.
Я хочу получить 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
Что я делаю неправильно?
Попробуйте следующее:
#!/bin/bash
args=("[email protected]")
echo ${args[1]}
okay замените "1" на некоторые $n или что-то в этом роде.
Вы можете использовать переменную косвенность. Он не зависит от массивов и отлично работает в вашем примере:
n=2
echo "${!n}"
Изменить: Переменная Направление может использоваться во многих ситуациях. Если есть переменная foobar
, то следующие два разложения переменных дают один и тот же результат:
$foobar
name=foobar
${!name}
Также выполняются следующие действия:
#!/bin/bash
n=2
echo ${@:$n:1}
Переносное (не-w50 > конкретное) решение
$ set a b c d
$ n=2
$ eval echo \${$n}
b
eval
может помочь вам косвенным образом получить доступ к переменной, что означает дважды оценить выражение.
Вы можете сделать это следующим образом: eval alph=\$$n; echo $alph