linux - Bash - 将带有反斜杠的用户名回显到文件

标签 linux bash

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

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

文件如下所示:

VI_USERNAME=domain  user

如何让我的输出看起来像这样:

VI_USERNAME=域\用户

最佳答案

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

$ 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

(自 2011 年以来,您可能在基于 Debian 的发行版上使用 sh,它调用 dash 而不是 bash)

关于 echo 的一般规则是,如果您必须询问,请使用 printf 代替:

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

echo 是一个遗留命令,它跨平台和 shell 以不同的方式处理数据,特别是在标志和反斜杠序列方面。

printf 定义良好,陷阱较少。

关于linux - Bash - 将带有反斜杠的用户名回显到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49566070/

相关文章:

linux - OS如何限制用户进程访问内核内存

java - Titan 加载 Elasticsearch 问题

linux - 在管道之后无法在源脚本中更改 bash 变量?

linux - awk 从字段中提取数字

linux - Dotnet Core 将不会使用交换

linux - 颠覆: how to make a working-directory on debian-webserver using windows repositories?

两个时间点之间的 Bash 历史记录

linux - 在服务器端使用 bash 代替 PHP/Perl 或 Java

bash - 带步进增量的大括号扩展不起作用 bash

用于用户提示的 Linux 函数