独自に処理される変数の変更

独自に処理される変数の変更

シェルスクリプトを作成したい

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}"

関連情報