Возникли некоторые проблемы при использовании переменной с числом.
Это работает;
sourceid_2="blah"
echo $sourceid_2
Но это не работает;
sourceid_2="blah"
i=2
echo $sourceid_$i
Есть идеи, как это исправить? Я пробовал без подчеркивания... но это не помогло.
Моя конечная цель — сделать что-то с переменной в цикле for i in {2..7}.. вот так;
for i in {2..7}
do
echo $sourceid_$i
done
решение1
echo $sourceid_$i
расширяет две отдельные переменные: $sourceid_
и $i
. Самый простой способ сделать то, что вы пытаетесь сделать, — это использовать косвенную ссылку:
sourceid_2="blah"
i=2
var=sourceid_$i
echo "${!var}"
Но как отметил @dave_thompson_085, массивы обычно являются лучшим способом сделать что-то подобное:
declare -a sourceid
sourceid[2]="blah"
i=2
echo "${sourceid[i]}"
Обратите внимание, что массивы — это расширение bash, и они недоступны в более простых оболочках.
решение2
Ваша проблема не в имени, содержащем цифру, что прекрасно работает, а в имени, содержащемпеременная. Вы можете использовать eval
(что трудно сделать правильно и легко испортить) или косвенное обращение, как x=source_$i; echo "${!x}"
в этом случае это дубликатмассив bash с переменной в именикоторые SX уже автоматически поместил в соответствующий список, чтобы вы могли их просмотреть.
Но если вы хотите, чтобы несколько связанных переменных были доступны по номеру, еще лучше использовать массив. Именно для этого и предназначены массивы, что делает их более удобными и безопасными. Чтобы узнать о массивах в bash, см. раздел руководства bash о массивах в вашей системе илив сети здесь