是否可以在转义引号内转义引号?

是否可以在转义引号内转义引号?

我想做的是在...内运行命令

su - someuser -c "ssh someplace \"if ( ! grep <b>[WHAT DO I PUT HERE?]</b>some thing<b>[WHAT DO I PUT HERE]</b> /etc/somefile ); then doSomething; fi\""

这是 grep 字符串的那些引号让我感到困惑,我现在会通过 grep 查找不带空格的内容来解决它,但我宁愿 grep 查找我想要 grep 的内容。

答案1

加三个引号没有用,你只能取消引号、引用、再取消引号。你也不需要子 shell。

你真正想要的是:

su - someuser -c 'ssh someplace "if ! grep \"some thing\" /etc/somefile; then doSomething; fi"'

这种方法很快就会变得笨拙——考虑只在服务器上放置一个脚本并执行它。这将使您远离嵌套引用地狱。

答案2

您可以只使用此处的文档。

su -someuser -c '<&1 >&2 ssh you@machine sh' 1<<\SCRIPT
    if   ! grep 'some spaces or whatever' /etc/somefile
    then : do something
    fi
#END
SCRIPT

该解决方案需要一点 fd 杂耍,因为您需要通过从 读取的初始密码su,并且su不会传递任何高于 2 的文件描述符。但是一旦您进行了身份验证sussh就不会搞砸 i/o 和这样您就可以立即进行重新分配,并让另一端调用的 shell 读取 stdin。

相关内容