정확히 다음 내용으로 파일을 생성하여 시작하십시오.
a\nb
이 파일의 이름을 지정 foo
하고 다음 명령을 실행하면 파일의 정확한 내용이 인쇄됩니다.
bash -c 'bar=$(cat foo);echo "$bar"'
sh
그러나 대신 실행하면 bash
결과는 다음과 같습니다.
a
b
여기서 문제는 \n
내가 원하지 않는 개행 문자로 변환되는 것입니다.
내 컴퓨터는 기본적으로 임베디드 Linux가 내장된 대상 컴퓨터 sh
로 설정되어 있으므로 매우 단순하며 not 과 매우 유사하게 작동합니다 .dash
ash
busybox
dash
bash
이것을 실행하면 sh -c 'cat foo'
예상한 결과를 얻을 수 있지만 변수 안에 넣고 싶습니다. 어떻게 해야 합니까?
답변1
실제로 셸은 명령을 분기하고 실행합니다. 그러나 (내장 명령이 아닌) 명령이 실행될 때마다 쉘이 분기됩니다. 이것이 쉘이 작동하는 방식이므로 불가피합니다.
참고: 셸은 아무 것도 번역하지 않습니다. 이 echo
명령은 작동합니다. 하지만 다음을 사용할 수 있습니다 printf
.
your_shell -c 'bar=$(cat foo); printf %s "$bar"'