2015-04-30 7 views

ответ

4

Я исправил свою проблему, добавив «экспорт» перед именем переменной. Не уверен, что это лучший способ.

+1

Это комментарий, а не ответ. – peterh

+2

Это ответ, просто отлично. Однако я бы рекомендовал использовать 'declare' вместо' export'. – kojiro

+3

Это гораздо лучший ответ, чем тот, который вы приняли. Я бы предложил переместить галочку. –

3

Если возможно, откажитесь от этого подхода как такового и вместо этого используйте ассоциативные массивы. Они доступны в Баш 4.

declare -A args 
arg[$i]=$(some commands here) 
3

Во-первых: Если у вас есть очень веские причины, чтобы использовать это вместо ассоциативных массивов, не нужно. The answer given by kojiro более подходит как наилучшая практика.

Второй: эта тема подробно освещена в BashFAQ #6. Резюмируя варианты, приведенные там ...


Вы можете использовать typeset (в Баш, KSH, или Zsh) или declare (в Баш):

typeset "${i}_arg=$(some commands here...)" 

Вы можете использовать printf -v (в последнее время баш):

printf -v "${i}_arg" %s "$(some commands here...)" 

Вы можете использовать read:

IFS= read -r "${i}_arg" < <(some commands here...) 
Смежные вопросы