У меня есть такой скрипт:
#!/bin/bash
USERS=("user1.com" "user2.co.uk" "user3.com")
PASSES=("pass1" "pass2" "pass3")
for i in ${USERS[@]}; do
echo ${PASSES[i]};
done
запуск этого скрипта выводит:
my-script.sh: строка 6: user1.com: синтаксическая ошибка: недопустимый арифметический оператор (токен ошибки — «.com»)
Однако мои значения заключены в кавычки и, насколько мне известно, echo
не являются арифметической операцией.
Исходя из PHP-бэкграунда, это сбивает с толку. В PHP мы можем сделать:
echo gettype($string);
echo gettype($int);
который выводит
строка
целое число
Но кавычки, похоже, не делают то, что я думаю. Как мне заставить использовать строку вместо того, чтобы рассматривать user1.com
как user1
.
com
?
решение1
Ваш текущий код расширяется до
for i in user1.com user2.co.uk user3.com; do
echo ${PASSES[i]};
done
что, конечно, не имеет никакого смысла. Оператор косвенности вместо этого создает список индексов массива:
bash$ echo "${!USERS[@]}"
0 1 2
Итак, с этим вы можете перебрать отдельные индексы. Давайте также добавим правильное кавычки.
for i in ${!USERS[@]}; do
echo "${PASSES[i]}"
done
Для полных точек не следует использовать заглавные буквы для личных переменных; имена переменных в верхнем регистре зарезервированы для системного использования.