bcコマンドでechoを使用してパイプを介して値を割り当て、変数をパラメータとして使用する

bcコマンドでechoを使用してパイプを介して値を割り当て、変数をパラメータとして使用する

デフォルトでは、$finalbyte変数(バイトのバイナリ表現で構成されています(例:11100000))に値を割り当てたいと思います。だから私はいくつかのスクリプトの一部として以下を試しました。

field4=224     ##224 for example, it could be any number.
               ##Depends on the script

finalbyte=$(echo 'obase=2; ibase=10; ${field4}' | bc)   ##<-------error here

説明が不要な次のエラーが発生します。しかし、問題は、$ field4が他のパラメータ間に入れ子になる方法を知らないか想像できないことです。エラーは次のとおりです。

(standard_in) 1: illegal character: $

答え1

一重引用符の代わりに二重引用符を使用してください。一重引用符内のパラメータは置き換えられません。

 finalbyte=$(echo "obase=2; ibase=10; ${field4}" | bc)

また、bashを使用している場合は、この場合はコマンド置換の代わりに文字列置換を使用することをお勧めします。

bc <<<"obase=2; ibase=10; ${field4}"

答え2

エコーのために参照されたパラメータの外に変数を移動します。

$ field4=224 finalbyte=$(echo 'obase=2; ibase=10;' ${field4}| bc )
$ echo $finalbyte
11100000

関連情報