私のシェルスクリプトは少し錆びているようです。私の望みは、bash で arraylist 構成変数をループし、このループ内で取得した必要なパラメーターを使用して関数を呼び出すことです。すべて分岐する必要はありません。
基本的に、次のような内部スクリプトの人間が解析可能なコンマ区切りの構成変数と呼ばれるものを作成しました。
CONFIG="
0, 0x00, 'Reset the chip, enable PLL with P=4, R=1, J=9, D=6338' %
1, 0x01, 'Reset the chip, enable PLL with P=4, R=1, J=9, D=6338' %
51, 0x10, 'Reset the chip, enable PLL with P=4, R=1, J=9, D=6338' %
63, 0xd4, 'Power up and unmute DAC' %
64, 0x00, 'Power up and unmute DAC' %
"
次に、次のようにパラメーターをループしたいと思います。
while read reg val expl; do
printf "%s %s\n" "Calling i2c_write() with reg=${reg//,/}" \
"val=${val//,/} expl=$expl __EOL__";
# i2c_write() call
done <<< "${CONFIG//\%/$'\n'}"
現在の出力は次のとおりです。
Calling i2c_write() with reg= val= expl= __EOL__
Calling i2c_write() with reg=0 val=0x00 expl='Reset the chip, enable PLL with P=4, R=1, J=9, D=6338' __EOL__
Calling i2c_write() with reg= val= expl= __EOL__
Calling i2c_write() with reg=1 val=0x01 expl='Reset the chip, enable PLL with P=4, R=1, J=9, D=6338' __EOL__
Calling i2c_write() with reg= val= expl= __EOL__
Calling i2c_write() with reg=51 val=0x10 expl='Reset the chip, enable PLL with P=4, R=1, J=9, D=6338' __EOL__
Calling i2c_write() with reg= val= expl= __EOL__
Calling i2c_write() with reg=63 val=0xd4 expl='Power up and unmute DAC' __EOL__
Calling i2c_write() with reg= val= expl= __EOL__
Calling i2c_write() with reg=64 val=0x00 expl='Power up and unmute DAC' __EOL__
Calling i2c_write() with reg= val= expl= __EOL__
Calling i2c_write() with reg= val= expl= __EOL__
望ましい出力は次のようになります。
Calling i2c_write() with reg=0 val=0x00 expl='Reset the chip, enable PLL with P=4, R=1, J=9, D=6338' __EOL__
Calling i2c_write() with reg=1 val=0x01 expl='Reset the chip, enable PLL with P=4, R=1, J=9, D=6338' __EOL__
Calling i2c_write() with reg=51 val=0x10 expl='Reset the chip, enable PLL with P=4, R=1, J=9, D=6338' __EOL__
Calling i2c_write() with reg=63 val=0xd4 expl='Power up and unmute DAC' __EOL__
Calling i2c_write() with reg=64 val=0x00 expl='Power up and unmute DAC' __EOL__
次の条件を満たしていれば、CONFIG 変数をより適切な構造に置き換えることができます。
- a) 変数のエントリをループするためにフォークは必要ありません。
- b) 上記の変数のエントリを人間が解析して編集するのはかなり簡単です。
- c) bash 3.2.x 以上で動作します。