正在改变自身处理的变量

正在改变自身处理的变量

我想写一个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

我收到这样的错误

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

我想将 OK 或 Fail 值记录到这些变量中,我正在使用 bash,我做错了什么。

如果我status_sda0=OK在 shell 中写入,它会将 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}"

相关内容