자체적으로 처리되는 변수 변경

자체적으로 처리되는 변수 변경

쉘 스크립트를 작성하고 싶습니다

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

이런 오류가 발생합니다

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

이 변수에 OK 또는 Fail 값을 기록하고 싶은데 bash를 사용하고 있는데 제가 뭘 잘못하고 있는 걸까요?

status_sda0=OK쉘에 쓰면 OK로 기록됩니다 .status_sda0

답변1

변수 이름이 정적 문자열이 아닌 경우(또는 이전 부분에 =변수 이름에 허용되지 않는 항목이 포함된 경우) 할당이 인식되지 않습니다.

당신은 다음을 수행해야합니다 eval:

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

편집하다

echo값을 다시 사용 하거나 간접 참조를 사용할 수 있습니다 eval.

eval echo \"\$status_$hdd\"

또는

var_name="status_$hdd"
echo "${!var_name}"

관련 정보