다음 문을 사용하여 아래 변수를 인쇄하기 위해 for 루프를 사용하고 있지만 값이 올바르게 인쇄되지 않습니다. 반복 값만 제공합니다. 누구든지 나를 도와줄 수 있나요?
value1="1500067"
value2="1500068"
value3="1500069"
package1="CNN"
package2="FOX"
package3="Discovery"
for iteration in {1..3}
do
echo ""$value""$iteration" - "$package""$iteration""
done
예상 출력:
1500067 - CNN
1500068 - Fox
1500069 - Discovery
답변1
다음과 같은 작업에는 실제로 배열을 사용해야 합니다.
#!/bin/bash
values=(
1500067
1500068
1500069
)
packages=(
CNN
FOX
Discovery
)
for (( i=0; i < ${#values[@]}; i++ )); do
echo "${values[i]} - ${packages[i]}"
done
또는 자연적인 키-값 쌍이 있으므로 연관 배열
#!/bin/bash
declare -A packages=(
[1500067]=CNN
[1500068]=FOX
[1500069]=Discovery
)
for key in "${!packages[@]}"; do
echo "$key - ${packages[$key]}"
done
답변2
나는 다음을 사용하여 이 작업을 수행할 수 있었습니다.
#!/bin/sh
value1="1500067"
value2="1500068"
value3="1500069"
package1="CNN"
package2="FOX"
package3="Discovery"
for i in {1..3}; do
var1="value$i"
var2="package$i"
echo "${!var1} - ${!var2}"
done
echo 명령에 큰따옴표를 너무 많이 사용하여 변수 설정 방식으로 인해 변수를 실제로 인용 해제했습니다. 전체 매개변수를 한 쌍의 따옴표로 묶으면 됩니다. 변수와 일치해야 하는 상황이 발생하면 괄호를 사용하여 이름을 유지하는 것이 좋습니다.
${var1}_something_else
해시뱅 에도 불구하고 여기에는 bash-ism 과 간접적인 #!/bin/sh
내용이 포함되어 있다고 생각합니다 . 그래도 내 시스템에서는 작동합니다.{1..3}
${1var}