나는 숫자를 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
-문으로 인해 출력이 파일로 >>
리디렉션( >
리디렉션, 추가)됩니다. 이유 플래그도 파일에 추가됩니다. 출력을 셸에 표시하려는 경우 에만 필요합니다.>>
-a
tee
tee
그리고파일로 리디렉션합니다.
답변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비트 정수에 맞지 않는 경우