当通过ssh传递命令时,单引号和双引号之间的区别

当我通过ssh向远程服务器发送命令时,有什么区别:

ssh [email protected] 'foo' 

 ssh [email protected] "foo" 

我没有传递任何variables,并且在远程运行命令时得到了不同的结果。

这个例子可能没有什么区别,但是肯定会有这样的一个:

 ssh [email protected] "echo $PATH" 

原因是bash会评估和replace本地机器上的双引号内的variables,但会在单引号内的目标机器上执行

子壳体也是如此:

 ssh [email protected] "echo `hostname`" ssh [email protected] "echo $(hostname)" 

但是,function似乎并非如此:

 $ foo () { echo "Foo"; } $ foo Foo $ ssh [email protected] "foo" bash: foo: command not found 

在双引号内也不会发生全局变化:

 $ ssh [email protected] "ls -l *" $ ssh [email protected] "ls -l numbered_files.?.gz"