에코를 사용하지 않고 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비트 정수에 맞지 않는 경우

관련 정보