为何ssh 127.0.0.1 bash -c "echo abc"命令输出空行而非abc?
为什么
ssh 127.0.0.1 bash -c "echo abc"输出空行? 核心问题出在本地shell的引号解析顺序:
- 当你在本地终端执行这条命令时,本地shell会先处理外层的双引号,把
"echo abc"解析成不带引号的echo abc。所以实际通过ssh传给远程主机的命令是:bash -c echo abc。 - 远程主机上的bash接收到
bash -c echo abc后,会把-c后面的第一个参数(也就是echo)当作要执行的命令字符串,剩下的abc会变成bash的位置参数($1),但echo命令本身没有调用这个参数。最终远程bash只执行了不带参数的echo,自然就输出空行。
如果要让命令正常输出abc,你需要让本地shell不要解析内层的引号,有两种常用方式:
- 用单引号包裹整个远程命令:
ssh 127.0.0.1 'bash -c "echo abc"' - 转义双引号:
ssh 127.0.0.1 bash -c \"echo abc\"
内容的提问来源于stack exchange,提问作者Kos
相关产品推荐
相关产品推荐

