Variável que está se processando [duplicada]

0

eu quero escrever um script de shell

cd /dev
for hdd in sd*; do
    [ -f "$hdd" ] || continue
    status_$hdd=$(my_def_get_hddstaus "$hdd")       #my_def_get_hddstaus returns OK or FAIL randomly just to test   
done

eu recebo um erro como

status_sda0=OK: command not found
status_sda1=FAIL: command not found

Eu quero gravar o valor OK ou Fail nessa variável, estou usando o bash, o que estou fazendo errado.

se eu escrever status_sda0=OK no shell, registre OK em status_sda0

    
por user2642486 29.10.2017 / 12:57

1 resposta

0

Se o nome da variável não for uma string estática (ou melhor: se a parte antes do = contiver qualquer coisa não permitida em um nome de variável), a designação não será reconhecida como tal.

Você precisa de eval :

tmp_var="$(my_def_get_hddstaus "$hdd")"
eval status_$hdd=\""$tmp_var"\"

editar

Você pode echo o valor usando eval novamente ou indiretamente:

eval echo \"\$status_$hdd\"

ou

var_name="status_$hdd"
echo "${!var_name}"
    
por 29.10.2017 / 13:14