エコーを使わずに10進から2進への変換を変数に保存する方法

エコーを使わずに10進から2進への変換を変数に保存する方法

私は数値を10進から2進数に変換し、次の変数に値を格納しようとしました。

num1=10
echo "obase=2;$num1" | bc   | tee -a register.txt

しかし、アイデアは単に変換して次のファイルに保存するだけなので、画面に表示したくありません。register.txt

どうすればいいですか?

答え1

output redirectionこれを行うには、次の方法を使用できます。

$ bc -l <<<"obase=2;$num" > register.txt

上記のコマンドは前の結果を上書きします。結果を追加する場合。

$ bc -l <<<"obase=2;$num" >> register.txt

>>- 追加モードで出力(STDOUT)メッセージをリダイレクトします。

> - オーバーレイモードで出力(STDOUT)メッセージをリダイレクトします。

<<<- 単語が拡張され、標準入力のコマンドに提供される文字列は次のとおりです。

答え2

このteeコマンドは出力を分割するために使用され、テキストをファイルや画面にインポートするために最も一般的に使用されます。

単に省略して、ファイルに出力リダイレクト(追加)を使用してください>>

echo "obase=2;$num1" | bc >> register.txt

答え3

ティーを使う代わりにI/O リダイレクトシェル:

echo "obase=2;$num1" | bc >>register.txt

- ステートメントにより、出力はファイルに>>リダイレクトされます(>リダイレクト、追加)。理由フラグもファイルに追加されます。出力をシェルに表示したい場合にのみ必要です。>>-ateeteeそしてファイルにリダイレクトします。

答え4

シェルがkshまたはの場合はバイナリに変換するzsh必要はありません。bc

ksh/zshから:

$ typeset -i2 num1=10
$ print -- "$num1"
2#1010
$ print -- "${num1#??}"
1010

そしてzsh

$ print -- $(( [##2] num1 ))
1010

(zshは引数拡張や算術拡張時に分割+globを実行しないので、引用しても問題にはなりませんが、引用する必要はありません。)

そしてksh93

$ num1=10
$ printf '%..2d\n' "$num1"
1010

どちらかを追加して> register.txtその出力をファイルにリダイレクトする(該当するコンテンツがある場合はコンテンツを置き換える)、>> register.txtまたは追加ファイルに書き込みます(tee -aこれに似ていますが、tee入力を標準出力にも書き込みます)。


¹数値が64ビット整数に合わない場合

関連情報