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

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

ssh user@123.456.789.012 "foo"

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

这个例子可能没什么区别,但肯定会有这个:
ssh user@123.456.789.012 "echo $PATH"

原因是bash将在本地机器上的双引号内评估和替换变量,但是会在单引号内的目标机器上进行.

子壳也是如此:

ssh user@123.456.789.012 "echo `hostname`"
ssh user@123.456.789.012 "echo $(hostname)"

但是,功能似乎不正确:

$foo () { echo "Foo"; }
$foo
Foo
$ssh user@123.456.789.012 "foo"
bash: foo: command not found

Globbing也不会在双引号内发生:

$ssh user@123.456.789.012 "ls -l *"
$ssh user@123.456.789.012 "ls -l numbered_files.?.gz"

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...