쉘 스크립트를 작성하고 싶습니다
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}"