在我的Perl脚本中我想通过
连接到机器my $result = `ssh $user@machine`;
其中$ user是当前计算机上的用户名。然而,这显然不起作用,因为Perl将整个字符串识别为一个变量。那么,在通过SSH连接时,有没有其他方法可以在用户名中使用变量?
我已经看到有一个SSH Perl模块,但是如果有另一个解决方案,我想避免使用其他模块。
提前谢谢!
答案 0 :(得分:3)
Escape sigil Luke:
my $result = `ssh $user\@machine`;
没有数组@machine
,不是吗?
反引号是Quote-like Operators。 (我建议使用通用qx{}
版本而不是常规反引号。)它会插入(除非您使用qx''
)内容,因此它会将@machine
插入为machine
数组的内容。它通过$"
变量的内容来区分成员,该变量默认为空格。如果您没有定义@machine
变量且没有use strict;
,则会将其插值为空字符串,如果未提供use warnings;
或-W
参数,则不会发出警告。
答案 1 :(得分:3)
Perl将整个字符串识别为一个变量。
不,那不是问题。问题是除了将$user
解析为变量之外,它还将@machine
解析为变量。
这只是逃避特殊字符的问题。
my $result = `ssh $user\@machine`;
如果问题确实是你需要传达变量的结尾,你可以使用curlies。
my $count = 4;
my $item = 'book';
print("$count $items\n"); # XXX
print("$count ${item}s\n"); # 4 books
答案 2 :(得分:0)
尝试:
我的$ result = ssh ${user}\@machine
;
如果您有多个变量,可以使用{}来表示它们不同 例如:$ {user1} _ $ {user2}
答案 3 :(得分:0)
这应该能解决Alex:
`ssh "${user}"@"${machine}"`;
答案 4 :(得分:-1)
你需要在字符串中转义“@”,作为一个数组,并在变量user周围使用双引号。
尝试:
my $result = `ssh "$user"\@machine`;