
我想將帶有空格的變數回顯到文字檔案中。
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 引用3split & globbed 文字片段:a
、b
和c
,在重定向到 /tmp/a 之前,它盡職盡責地轉義了這些文字(什麼也不做)abc
。
仔細閱讀:為什麼我的 shell 腳本會因為空格或其他特殊字元而卡住?看看發生了什麼事。
答案2
只需將其放在引號中即可。
a="a\ b\ c"
或者,逃避逃避。
a=a\\\ b\\\ c
兩者最終都會得到相同的結果。
答案3
基於 Jeff 回饋的解決方案:
echo $a | sed -e "s/ /\\\ /g" > /tmp/a