为什么我不能将 SSH 的结果连接到另一个变量?

Why can I not concatenate the result of an SSH to another variable?

我正在尝试以当前登录用户身份通过​​ SSH 连接到一台机器。因此:

#!/bin/bash

ip="[ip-redacted]"
currentuser=$(ssh -t -t macuser@$ip "stat -f '%Su' /dev/console")
echo $currentuser # prints "macuser"
echo "$currentuser" # same as above
echo "$currentuser""@$ip" # prints "@[ip-redacted]"

为什么当我单独打印 currentuser 时,它打印出正确的用户,但是当我尝试将其附加到 ip 时,却什么也没有显示?

由于您对 ssh 使用 -t 选项,因此输出在每行末尾包含回车符 return 和换行符(因为这是需要发送到一个终端)。 $(...) 自动删除最后一个 LF 字符,因此 $currentuserCR 结尾。所以它打印 stat 命令的输出,然后是 CR,然后是 @$ipCR 将光标移动到行首,然后 @$ip 覆盖用户名。

最简单的解决方案是省略 -t 选项(这两个选项 -- 我不知道您为什么使用它两次)。您的命令不需要伪终端 运行.