탈출의 공간을 어떻게 울릴 수 있습니까?

탈출의 공간을 어떻게 울릴 수 있습니까?

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

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

위의 결과는 a b c이를 포함하는 파일입니다. 파일을 읽어야 하면 어떻게 합니까 a\ b\ c?

시도해 보았지만 printf %q $a그것도 내가 원하는 효과를 얻지 못한 것 같습니다.

참고: 또한 내가 콘텐츠를 생산하지 않는다고 가정하면 $a콘텐츠가 나에게 전달하는 것은 내 통제 범위를 벗어납니다. 이스케이프된 공백과 함께 저장되었는지 확인하면 됩니다.

답변1

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

a=a\\\ b\\\ c

또는

a='a\ b\ c'

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

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

실행할 때:

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

printf에게 인용하라고 지시합니다.분할 및 glbbed 텍스트 조각: 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

관련 정보