我如何才能与逃逸空间相呼应?

我如何才能与逃逸空间相呼应?

我想将带有空格的变量回显到文本文件中。

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

相关内容