2016-02-29 1 views
2

Я хотел бы использовать переменный в качестве значения индекса для обозначения позиционных переменных, передаваемых в скрипт, например:Баша - использовать переменную INT в качестве индекса отсылая к позиционным параметрам, передаваемых в функцию

x=101 
y=201 
z=301 

foo(){ 

    i=0; 
    ((i+=1)); # i=1 
    echo "${$i}"; # parameter 1 
    ((i+=1)); # i=2 
    echo "${$i}"; # parameter 2 
    ((i+=1)); # i=3 
    echo "${$i}"; # parameter 3 
} 

foo x y z 

выхода :

101 
201 
301 

Массивы и циклы не поможет в данном случае, мне нужен простой метод инкрементируя ИНТ переменной и использовать это значение в качестве индекса для получения параметра метода передается.

Рекомендации?

+0

Подсказки: [shellcheck] (http://www.shellcheck.net) распознает общие ошибки и ошибочные попытки сделать что-то, [включая этот] (https://github.com/koalaman/shellcheck/wiki/SC2082). –

+0

Вы можете показать парсы с 'while [$ # -gt 0]; do echo "Next par is $ 1"; коробка передач; сделано' –

ответ

1

Я считаю, что вам нужно косвенное расширение переменного здесь:

x=101 
y=201 
z=301 

foo() { 
    local i 
    local v 
    for ((i=1; i<=3; i++)); do 
    v="${!i}" # will get x, y, z 
    echo "${!v}" # will get values of $x, $y, $z 
    done 
} 

Тогда называют его как:

foo x y z 

101 
201 
301 
+1

О, * это *, что хотел OP! Я совершенно неправильно понял вопрос. –

+0

«Массивы и циклы в этом случае не помогут» – KGCybeX

+0

Здесь нет массивов, и цикл - это просто сохранение повторяющегося кода. Вы можете удалить цикл и прирастить '$ i' 3 раза, как вы в вопросе – anubhava

Смежные вопросы