Как я могу увеличить переменную, уже определенную в bash? Вот что я имею в виду:Bash for loop не понимает переменные правильно?
ID1="YAY1"
ID2="YAY2"
for ((c=1; c<=3; c++))
do
if [ "$SOMEOTHERVAR" = "ID$c" ]; then BLAH; fi
done
Проблема заключается в том, когда она увеличивает переменную уже определен, чтобы сделать сравнение, он думает, что ID $ с равно строке ID1, а не то, что ID1 равно что YAY1, поэтому если оператор всегда оценивает значение false. Я надеюсь, что в этом есть смысл.
Благодарим за помощь!
** * ***UPDATE* ** * **
Спасибо всем за вашу помощь. Самое чистое решение - использовать единый массив, смешанный с разрезом. Не может быть самым чистым способом, но отлично работает. Вот отрывок ниже:
# CONTACTS
declare -a EMAIL
EMAIL[1]="JS:[email protected]"
EMAIL[2]="JD:[email protected]"
EMAIL[3]="JK:[email protected]"
# FUNCTIONS
function EMAIL {
for i in "${!EMAIL[@]}"; do
POINTER="`echo ${EMAIL[$i]} | cut -d":" -f1`"; ADDRESS="`echo ${EMAIL[$i]} | cut -d":" -f2`";
if [ "$POINTER" = "$PEMAIL" ]; then TO="$ADDRESS"; fi
if [ "$POINTER" = "$SEMAIL" ]; then CC="$ADDRESS"; fi
done
}
PEMAIL и SEMAIL являются компараторы, которые тянули из базы данных в другой части сценария.
Это идеальное решение, которое я бы хотел использовать, но я думал, что bash не может обрабатывать массивы по какой-то причине. Возможно, это то, что он не может обрабатывать многомерные массивы, что мне нужно во второй части этого упрощенного примера. Можете ли вы показать мне пример этого, используя многомерный массив? Я давно отказался от использования многомерных массивов в bash, но вы снова вызвали мой интерес. Большое спасибо за помощь. – Atomiklan
т.е. В конце концов мне нужно связать другую переменную с «YAY1». Лучшим примером для реального мира будет: JS: [email protected] Благодарим за помощь. В качестве побочной заметки, я не прошу вас написать это для меня, просто хочу включить в контекст то, что я пытаюсь выполнить. Спасибо! JD: [email protected] Вот логика: если следующая переменная (например, JD, вытащил из другой области сценария) = идентификатор в массиве (JD), затем установите поле CC в [email protected] – Atomiklan
Последняя мысль. Я все еще не думаю, что многомерные массивы возможны в bash, не «подделывая» его. Возможно, лучший способ сделать то, что я пытаюсь сделать, это сказать небольшую базу данных внутри скрипта с использованием двоеточия или значений, разделенных запятыми. JD: JDoe @ пример.com, тогда просто сделайте цикл while с grep и вырежьте, чтобы вытащить необходимую информацию. Все, что я пытаюсь сделать это: в базе данных пользователь «проверяется», чтобы быть включенным в уведомление по электронной почте. Когда они отмечены, они связаны с переменной 2 символа JD, JR и т. Д. Когда скрипт запускается, он видит, кто должен отправить CC на основе var. – Atomiklan