대시의 에코를 통한 백슬래시 확장 방지

대시의 에코를 통한 백슬래시 확장 방지

정확히 다음 내용으로 파일을 생성하여 시작하십시오.

a\nb

이 파일의 이름을 지정 foo하고 다음 명령을 실행하면 파일의 정확한 내용이 인쇄됩니다.

bash -c 'bar=$(cat foo);echo "$bar"'

sh그러나 대신 실행하면 bash결과는 다음과 같습니다.

a
b

여기서 문제는 \n내가 원하지 않는 개행 문자로 변환되는 것입니다.

내 컴퓨터는 기본적으로 임베디드 Linux가 내장된 대상 컴퓨터 sh로 설정되어 있으므로 매우 단순하며 not 과 매우 유사하게 작동합니다 .dashashbusyboxdashbash

이것을 실행하면 sh -c 'cat foo'예상한 결과를 얻을 수 있지만 변수 안에 넣고 싶습니다. 어떻게 해야 합니까?

답변1

실제로 셸은 명령을 분기하고 실행합니다. 그러나 (내장 명령이 아닌) 명령이 실행될 때마다 쉘이 분기됩니다. 이것이 쉘이 작동하는 방식이므로 불가피합니다.

참고: 셸은 아무 것도 번역하지 않습니다. 이 echo명령은 작동합니다. 하지만 다음을 사용할 수 있습니다 printf.

your_shell -c 'bar=$(cat foo); printf %s "$bar"'

관련 정보