Como imprimir o nome da variável em vez de seu script shell de valor?

0

Abaixo está o meu programa, 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

O resultado é:

# sh a.sh

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

Como podemos fazer isso?

    
por Piyush Sharma 19.03.2017 / 08:29

1 resposta

6

com 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

Use -eq para comparar valores inteiros (ou use (( ${!var} == 0 )) ou (( !${!var} )) , que é a mesma coisa) e use ${!var} para obter o valor da variável cujo nome está armazenado na variável var .

Ou, um pouco mais puro, mas essencialmente o mesmo (ainda em 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

Isso trata os valores como strings, não como inteiros.

    
por 19.03.2017 / 09:32