使用/解析远程变量时如何正确转义单引号? [复制]

Posted

技术标签:

【中文标题】使用/解析远程变量时如何正确转义单引号? [复制]【英文标题】:How can I escape a single quote correctly in when using/parsing a remote variable? [duplicate] 【发布时间】:2019-09-27 11:10:12 【问题描述】:

我正在尝试转义位于远程服务器上的以下变量:

ssh root@$HWNODEIP "echo '    set root='$getgrub''   >> /etc/grub.d/40_custom"

简而言之,我需要在变量 $getgrub 之前和之后添加一个单引号

我尝试了几种方法,例如将它们放在双引号 (") 中并转义 (),但是没有运气。我得到的唯一结果是类似的东西,例如:“sed: -e expression #1, char 43: unknown 's'的选项”

我做错了什么,正确的方法是什么? 我还尝试存储包含单引号的 $getgrub 变量,但是它们没有出现在文件 /etc/grub.d/40_custom?!

可能我在某个地方犯了错误,但我似乎找不到它。

谢谢。

//编辑

如果我从服务器运行以下命令:

ssh root@$HWNODEIP  "echo '    set root='$getgrub'' >> /etc/grub.d/40_custom"

然后我检查了变量在文件中的文件,但是前后没有单引号?

文件的输出(cat):

设置 root=EXAMPLE

应该写在哪里:

设置 root='EXAMPLE'

奇怪...

【问题讨论】:

试试:ssh root@$HWNODEIP "echo \"set root='$getgrub'\"" 没关系。我修改了你的代码并且它有效。将在一分钟内报告。这对我有用: ssh root@$HWNODEIP "echo \"set root='$getgrub'\" >> /etc/grub.d/40_custom" 请创建它作为答案。所以我可以投票给你的答案。泰! 不错!添加了一个答案。 :) 【参考方案1】:

你需要为 echo 转义双引号:

示例

$ ssh user@server "echo \"set example='test'\" >> example.txt"

结果(服务器上的 example.txt)

$ cat example.txt
set example='test'

【讨论】:

以上是关于使用/解析远程变量时如何正确转义单引号? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

php中单引号和双引号的区别,哪个速度更快?为啥?

使用 sshpass 时如何转义单引号

关于引号的总结

Perl双引号和单引号的区别

在空手道 DSL 中,如何在 java 参数调用中传递变量时转义单引号

PHP字符串的定义方式及区别