Bash - 带有反斜杠到文件的echo用户名

时间:2018-03-29 22:41:35

标签: linux bash

Linux新手在这里,但我有一个应该创建文件的脚本:

VI_USERNAME=domain\\user
echo "VI_USERNAME=$VI_USERNAME" >> .visdkrc

文件如下所示:

VI_USERNAME=domain  user

如何才能使输出看起来像这样:

VI_USERNAME =域\用户

1 个答案:

答案 0 :(得分:1)

使用您描述的代码bash不会发生这种情况(protip:总是测试您自己的示例):

$ cat myfile
VI_USERNAME=domain\\user
echo "VI_USERNAME=$VI_USERNAME" >> .visdkrc

$ bash myfile

$ cat .visdkrc
VI_USERNAME=domain\user

但是,如果用户名以" t"

开头,则dash会发生类似的情况:

$ cat myfile
VI_USERNAME=domain\\thatotherguy
echo "VI_USERNAME=$VI_USERNAME" >> .visdkrc

$ dash myfile

$ cat .visdkrc
VI_USERNAME=domain      hatotherguy

(您可能正在使用sh,自2011年起在基于Debian的发行版中调用dash而非bash

关于echo的一般规则是,如果您不得不提问,请改为使用printf

VI_USERNAME=domain\\user
printf '%s\n' "$VI_USERNAME" >> .visdkrc

echo是一个遗留命令,可以跨平台和shell对数据进行不同的处理,尤其是在标志和反斜杠序列方面。

printf定义明确,陷阱较少。