변수가 문자열 유형을 사용하도록 강제하는 방법은 무엇입니까?

변수가 문자열 유형을 사용하도록 강제하는 방법은 무엇입니까?

이 스크립트가 있습니다.

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

전체 크레딧을 얻으려면 개인 변수에 대문자를 사용하면 안 됩니다. 대문자 변수 이름은 시스템용으로 예약되어 있습니다.

관련 정보