シェルスクリプトを作成したい
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}"