我一直在尝试将数字从十进制转换为二进制的值保存在变量中,如下所示:
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 是ksh
或zsh
,则无需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 位整数中