/bin/sh - echo >> 연산자가 예상대로 작동하지 않습니다.

/bin/sh - echo >> 연산자가 예상대로 작동하지 않습니다.

파일에 바이너리 콘텐츠를 추가하는 쉘 스크립트를 작성 중입니다. 나는 다음 명령을 사용해 보았습니다.

echo -en '\x61\x62\x63..' >> /tmp/myfile

그러나 결과는 다음과 같습니다.

-en \x61\x62\x63..

매번 모든 내용을 삭제하지 않고도 파일에 콘텐츠를 추가할 수 있는 방법이 있습니까?

노트

시스템에서 이 작업을 수행하려고 합니다.오직/bin/sh, 이 명령은 제대로 작동 bash하지만 기본 셸을 사용할 때는 작동하지 않습니다.

답변1

Bash에는 echo내장 함수가 있으므로 이러한 동작이 발생합니다. sh 에는 내장되어 있지 않습니다 . 좋다다양한 내장 "echo" 명령을 사용하세요.

/bin/echo그러니 사용하지 않는 대신 사용해 보세요 /bin/.

답변2

이식성을 고집하고 싶다면 사용할 수 없습니다에코또는인쇄 기능, 둘 다 지정되지 않은 이스케이프 시퀀스를 \xXXPOSIX 정의로 처리합니다.

GNU 시스템에서도 의 동작은 echo내장되어 있거나 /bin/echo변경될 수 있습니다. 당신은 시도 할 수 있습니다:

$ POSIXLY_CORRECT=1 /bin/echo -en '\x61'
-en \x61

$ env BASHOPTS=xpg_echo POSIXLY_CORRECT=1 bash -c "echo -en '\x61'"
-en a

(읽어야 해.이것자세한 내용은).

표준 POSIX 도구 상자를 사용하면 다음을 사용할 수 있습니다 awk.

$ awk 'BEGIN{printf "%c%c%c..", 97, 98, 99}'
abc..

관련 정보