쉘 스크립트에서 값 대신 변수 이름을 인쇄하는 방법은 무엇입니까?

쉘 스크립트에서 값 대신 변수 이름을 인쇄하는 방법은 무엇입니까?

아래는 내 프로그램입니다 a.sh.

A=10 B=20 C=0 D=1

for var in {A,B,C,D}
do
    if [ $var = 0 ]
    then
        echo "$var value is 0"
    else
        echo "Ok" 
    fi
done

결과 :

# sh a.sh

Ok
Ok
0 value is 0   <==== Instead of this I want  "C value is 0"
Ok

우리는 무엇을 해야 합니까?

답변1

그리고 bash:

A=10
B=20
C=0
D=1

for var in A B C D; do
    if [ ${!var} -eq 0 ]; then
        echo "$var value is 0"
    else
        echo "Ok"
    fi
done

-eq정수 값을 비교하는 데 사용하고 (또는 동일한 것을 사용하여) (( ${!var} == 0 ))변수 에 이름이 저장된 변수의 값을 가져오는 데 사용합니다 .(( !${!var} ))${!var}var

또는 더 간결하지만 본질적으로 동일합니다(여전히 bash).

for var in A B C D E; do
    case ${!var} in
        0) printf '%s value is 0\n' "$var" ;;
        *) echo 'Ok' ;;
    esac
done

이는 값을 정수가 아닌 문자열로 처리합니다.

관련 정보