При использовании тестов bash
в парах [[
]]
используйте -gt
и -lt
для числовых ' сравнения «больше чем» и «меньше чем». <
и >
используются для сравнения строк, в которых [[ 1000000 < 90 ]]
действительно будет истинным.
Ваша проблема не в имени, содержащем число, которое прекрасно работает, а в имени, содержащем переменную. Вы можете использовать eval
(что трудно понять правильно и легко испортить) или косвенность, например x=source_$i; echo "${!x}"
в этом случае это дубликат массива bash с переменной в имени, который SX уже автоматически поместил в связанный список для просмотра.
Но если вы хотите получить доступ к нескольким связанным переменным по номеру, даже лучше использовать массив. Это именно то, для чего предназначены массивы, что делает их более удобными и безопасными. Чтобы узнать о массивах в bash, см. раздел руководства bash о массивах в вашей системе или в Интернете здесь
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 расширение и недоступно в более простых оболочках.