use*_*485 49 shell bash quoting
如何在 bash 的 here-doc 中回显“$”?
例如,我想在远程服务器上有一个包含内容的文件,如$ABC=home_dir
.
$ ssh hostname sudo -s <<EOF
echo "$ABC=home_dir" > file
EOF
Run Code Online (Sandbox Code Playgroud)
但它会被视为一个变量。如何打印文字$
?
Mad*_*ist 75
如果您想编写一个 here-doc 并且您不希望扩展任何文档或解释任何特殊字符,您可以用单引号引用标签,如下所示:
$ cat >file <<'EOF'
echo "$ABC=home_dir"
EOF
Run Code Online (Sandbox Code Playgroud)
但是,您的示例中描述的情况要复杂得多,因为您实际上是通过 ssh 将此内容发送到远程系统,由 sudo 运行,它也调用了一个 shell(这样 shell 将扩展内容同样)。您将需要更多级别的引用才能做到这一点,但即使如此,它仍然无法正常工作,因为 sudo 需要一个终端(因此它可以要求输入密码)并且您已从 stdin 重定向。即使使用ssh -t
在这里也无济于事。
我也同意约翰。目前还不清楚这是否真的是你想要的;请注意,将值分配给 shell 变量引用是不合法的,因此如果您尝试创建的此文件应该是 shell 脚本,则它不会像您描述的那样工作。也许如果您稍微备份一下并描述您真正想做的事情,我们可以提供更多帮助。
les*_*ana 22
逃离 $
$ ssh hostname sudo -s <<EOF
echo "\$ABC=home_dir" > file
EOF
Run Code Online (Sandbox Code Playgroud)
我不知道你的用例是什么,但通常你想要home_dir=$ABC
而不是$ABC=home_dir
.
最便宜的逃跑方式是
$ ssh hostname sudo -s << \EOF
echo "$ABC=home_dir" > file
EOF
Run Code Online (Sandbox Code Playgroud)