我想将带有空格的变量回显到文本文件中。
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