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