Как принудительно задать строковый тип переменной?

Как принудительно задать строковый тип переменной?

У меня есть такой скрипт:

#!/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

Для полных точек не следует использовать заглавные буквы для личных переменных; имена переменных в верхнем регистре зарезервированы для системного использования.

Связанный контент