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