문맥

문맥

문맥

파일이 있습니다 my-cmd.

echo '<some data...>\\<some other data...>'

기본적으로 이 명령의 출력을 텍스트 파일로 리디렉션하고 싶습니다.

./my-cmd > file.txt

질문

내 문제는 항상 to 의 >모든 항목을 바꾸는 것 입니다 .\\\file.txt

이 동작을 방지하려면 어떻게 해야 합니까?

답변1

my-cmd다음과 같이 하면 :

echo "abc\\def"

출력은 다음과 같습니다 abc\def. 백슬래시는 큰따옴표 안의 이스케이프 문자로 해석됩니다. OTOH, 작은따옴표 안의 리터럴 백슬래시로 처리됩니다.

echo 'abc\\def'

abc\\def출력으로 생성됩니다 .

편집: 이것은 bash로 테스트되었습니다. OP는 태그를 "zsh"로 변경했기 때문에 그의 질문에 대한 답변이 아닙니다. 지금 운영자님이 쓸데없는 내용이라고 생각하시면 삭제하겠습니다.

답변2

echo이식할 수 없는 명령이며 해당 동작은 구현, 버전, 컴파일 타임 및 런타임 옵션, 환경에 따라 다릅니다.

-특히 첫 번째 인수가 다음으로 시작하거나(zsh의 내장 함수가 echo이 문제를 해결할 수 있는 드문 구현 중 하나임에도 불구하고) 인수에 백슬래시 문자가 포함된 경우에는 사용해서는 안 됩니다.

특히, zsh echo내장 구현 의 경우 옵션이 활성화되어 있지 않으면(대부분의 경우 기본적으로 비활성화되어 있음 ) 기본 제공 구현의 경우 \시퀀스(예: \n, \c, ...) \61\\POSIX+XSI에서 요구하는 대로 확장되지만 XSI가 없는 POSIX는 지정되지 않은 동작을 유지합니다. bsdecho배포) 활성화된 경우 bash에만 xpg_echo확장되기 때문입니다(대부분의 배포에서는 기본적으로 비활성화됨).

zsh및 s는 모두 확장을 비활성화하는 bash echo(비표준) -E옵션을 지원합니다( 및 옵션이 bash모두 xpg_echo활성화된 경우 s는 활성화되지 않음).posix

여기서도 이것을 할 수 있습니다:

echo -E '<some data...>\\<some other data...>' > file

zsh대부분의 배포에서 잘 작동합니다 bash. 표준 명령을 사용하는 것이 더 나을 것입니다 printf.

printf '%s\n' '<some data...>\\<some other data...>' > file

이 경우 동작은 POSIX에 의해 완전히 지정되며 모든 구현에서 동일합니다.

printf유틸리티는 POSIX 발명품이라는 점에 유의하십시오. POSIX 이전에 echo이러한 이식 불가능한 혼란에 대한 Korn 쉘의 솔루션은 새로운 print내장 기능과 시퀀스를 -r확장하지 않는 옵션 및 옵션의 끝을 표시하는 옵션이었습니다. 실제로 Korn과 유사한 내장 기능이 있지만 그렇지 않습니다.\x-zshprintbash

ksh 및 zsh에서는 다음을 수행할 수도 있습니다.

print -r - "$var"

모든 데이터를 있는 그대로 인쇄합니다.

자세한 내용은 다음을 참조하세요.

답변3

~에 따르면프레디가 뭐라고 했어?댓글에서니카드의 대답, my-cmd해야 한다:

/bin/echo -E '<some data...>\\<some other data...>'

zsh그래서 기본적 으로 , 내가아니요 bash, 기본적으로 백슬래시 문자를 특별히 처리하는 명령을 사용합니다 echo. zsh사용하려는 명령을 지정해야 /bin/echo하고 -E해당 옵션을 사용하여 호출해야 합니다.

man echo-E옵션 에 대한 설명 은 다음과 같습니다 .

   -E     disable interpretation of backslash escapes

답변4

답변

아시다시피 이는 >출력 리디렉션 연산자입니다(본질적으로 명령의 출력을 특정 위치로 리디렉션한다는 의미).

여러 출력을 동일한 파일로 리디렉션하려면 이 >>명령을 사용해야 합니다. 명령과 동일한 구문을 사용 >하지만 이전에 리디렉션된 데이터를 완전히 다시 작성/제거하는 대신 아래에 추가합니다.

예/구문

./my-cmd > file.txt그러니 하지 마세요../my-cmd >> file.txt

관련 정보