「Shell」- 转义问题

  CREATED BY JENKINSBOT

#1

这是别人在群里问到的一个问题。看如下命令:

ssh localhost "/bin/cat > /tmp/tmp << eof
\\\$demo
eof"

上述命令生成的/tmp/tmp文件的内容是$demo,为什么?首先,传给SSH的命令在双引号中,所以Bash先解析一次,但是它解析了”\\“和”\$“两个组合。也就是说,SSH拿到手的时候,命令已经变成”\$name“。即:

/bin/cat > /tmp/tmp << eof
\$demo
eof

那么,写入文件的自然就是”$name“字符串。

换句话说,下面的写法是等效的:

ssh localhost '/bin/cat > /tmp/tmp << eof
\$dddd1
eof