SSH命令中如何同时包含本地和远程变量
如何在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
。这是因为您是使用定义A
的A=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;'
以上是 SSH命令中如何同时包含本地和远程变量 的全部内容, 来源链接: utcz.com/qa/425570.html