공백이 포함된 변수를 텍스트 파일에 에코하고 싶습니다.
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