我該如何與逃逸空間相呼應?

我該如何與逃逸空間相呼應?

我想將帶有空格的變數回顯到文字檔案中。

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 文字片段:abc,在重定向到 /tmp/a 之前,它盡職盡責地轉義了這些文字(什麼也不做)abc

仔細閱讀:為什麼我的 shell 腳本會因為空格或其他特殊字元而卡住?看看發生了什麼事。

答案2

只需將其放在引號中即可。

a="a\ b\ c"

或者,逃避逃避。

a=a\\\ b\\\ c

兩者最終都會得到相同的結果。

答案3

基於 Jeff 回饋的解決方案:

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

相關內容