이스케이프된 공백으로 어떻게 에코할 수 있나요?

이스케이프된 공백으로 어떻게 에코할 수 있나요?

공백이 포함된 변수를 텍스트 파일에 에코하고 싶습니다.

a=a\ b\ c
echo $a > /tmp/a

위의 결과는 그 안에 파일이 생성됩니다 a b c. 파일을 읽어야 하면 어떻게 합니까 a\ b\ c?

시도해 보았지만 printf %q $a그것도 내가 원하는 대로 되지 않는 것 같습니다.

$a참고: 또한 내가 통제할 수 없는 내용이 나에게 전달되는 내용을 내가 생산하지 않는다고 가정합니다 . 이스케이프된 공백과 함께 저장되었는지 확인하면 됩니다.

답변1

백슬래시는 다음 문자를 이스케이프합니다. 귀하의 경우에는 공간을 탈출했으며 그 시점에서 내용은 $amake: 입니다 a b c. $a의 내용에 백슬래시를 포함하려면 백슬래시를 이스케이프 처리해야 합니다.

a=a\\\ b\\\ c

또는

a='a\ b\ c'

$a에 공백이 포함된 텍스트가 이미 포함되어 있고 이를 파일에 저장하려면 다음을 수행하세요.

printf "%q" "$a" > /tmp/a

실행했을 때:

printf "%q" $a > /tmp/a

printf에게 인용하라고 지시했습니다.a, b, 및 의 텍스트 조각을 분할하고 글로브했는데, c/tmp/a로 리디렉션되기 전에 (아무 작업도 하지 않고) 충실히 이스케이프되었습니다 abc.

다음 내용을 잘 읽어보세요.쉘 스크립트가 공백이나 기타 특수 문자로 인해 막히는 이유는 무엇입니까?무슨 일이 일어나고 있는지 확인하기 위해.

답변2

따옴표로 묶어주시면 됩니다.

a="a\ b\ c"

또는 탈출구를 탈출하십시오.

a=a\\\ b\\\ c

둘 다 같은 결과로 끝납니다.

답변3

Jeff의 피드백을 기반으로 한 솔루션:

echo $a | sed -e "s/ /\\\ /g" > /tmp/a

관련 정보