【问题标题】:Bash - echo username with backslash to file [duplicate]Bash - 用反斜杠将用户名回显到文件[重复]
【发布时间】:2018-03-29 22:41:34
【问题描述】:

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

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

文件如下所示:

VI_USERNAME=domain  user

我怎样才能让我的输出看起来像这样:

VI_USERNAME=域\用户

【问题讨论】:

标签: linux bash


【解决方案1】:

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 定义明确,陷阱更少。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 2023-01-27
    相关资源
    最近更新 更多