SSH命令中如何同时包含本地和远程变量

例如下面的示例代码:

A=3;
ssh host@name "B=3; echo $A; echo $B;"

可以得到A,但无法得到B。

但是在以下示例中:

A=3;
ssh host@name 'B=3; echo $A; echo $B;'

无法得到A,只能得到B。

是否可以同时访问A和B?

可以!

A=3;
ssh host@name "B=3; echo $A; echo \$B;"

使用双引号时 :

您的shell会对前缀为$的变量进行自动扩展,因此在您的第一个示例中,当看到

ssh host@name "B=3; echo $A; echo $B;"

bash将其扩展为:

ssh host@name "B=3; echo 3; echo ;"

然后传递host@name "B=3; echo 3; echo ;"作为参数ssh。这是因为您是使用定义AA=3,但从未定义过B,因此$B会在本地解析为空字符串。


当使用单引号时 :

用单引号引起来的所有内容都解释为字符串文字,因此在执行以下操作时:

ssh host@name 'B=3; echo $A; echo $B;'

B=3; echo $A; echo $B;一旦您登录到远程服务器,说明将运行。您已经B在远程外壳程序中定义了,但是您从未告诉过它是什么A,因此$A将解析为空字符串。


因此,当您使用时\$,如解决方案中所示:

\$意思是按$字面意义解释字符,因此我们按字面意义发送echo $B作为远程执行指令之一,而不是先让bash
$B在本地扩展。我们最终告诉ssh我们要做的事情等效于此:

ssh host@name 'B=3; echo 3; echo $B;'

参考:http://codingdict.com/questions/45775 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值