루프를 통해 변수 값을 인쇄합니다.

루프를 통해 변수 값을 인쇄합니다.

다음 문을 사용하여 아래 변수를 인쇄하기 위해 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}

관련 정보