Имя переменной BASH, содержащее номер, проблема [дубликат]

При использовании тестов bash в парах [[ ]] используйте -gt и -lt для числовых ' сравнения «больше чем» и «меньше чем». < и > используются для сравнения строк, в которых [[ 1000000 < 90 ]] действительно будет истинным.

0
26.05.2017, 08:47
2 ответа

Ваша проблема не в имени, содержащем число, которое прекрасно работает, а в имени, содержащем переменную. Вы можете использовать eval (что трудно понять правильно и легко испортить) или косвенность, например x=source_$i; echo "${!x}" в этом случае это дубликат массива bash с переменной в имени, который SX уже автоматически поместил в связанный список для просмотра.

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

3
28.01.2020, 02:13

echo $sourceid_$i expands две отдельные переменные: $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 расширение и недоступно в более простых оболочках.

5
28.01.2020, 02:13

Теги

Похожие вопросы