如何在变量中保存从十进制到二进制的转换而不使用 echo

如何在变量中保存从十进制到二进制的转换而不使用 echo

我一直在尝试将数字从十进制转换为二进制的值保存在变量中,如下所示:

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

不使用 tee,只需使用I/O 重定向外壳:

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

-语句>>导致输出重定向(>重定向、>>追加)到文件。-a原因标志也tee附加到文件中。仅tee当您希望输出显示在 shell 中时才需要重定向到一个文件。

答案4

请注意,如果您的 shell 是kshzsh,则无需bc转换为二进制。

在 ksh/zsh 中:

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

zsh

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

(zsh 不会在参数扩展或算术扩展时执行 split+glob,因此您不需要引用它们,尽管引用不会造成损害)。

ksh93

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

对于其中任何一个,添加> register.txt以将该输出重定向到文件中(替换其内容,如果有),>> register.txt或者附加将其写入文件(就像tee -a这样做;不过tee也将其输入写入其标准输出)。


¹ 除非该数字无法容纳在 64 位整数中

相关内容