이 스크립트가 있습니다.
#!/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
전체 점수를 얻으려면 개인 변수에 대문자를 사용하면 안 됩니다. 대문자 변수 이름은 시스템용으로 예약되어 있습니다.