Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Perl在SSH中作为变量的用户名_Perl_Variables_Ssh - Fatal编程技术网

使用Perl在SSH中作为变量的用户名

使用Perl在SSH中作为变量的用户名,perl,variables,ssh,Perl,Variables,Ssh,在我的Perl脚本中,我希望通过 my $result = `ssh $user@machine`; 其中$user是当前计算机上的用户名。但是,这显然不起作用,因为Perl将整个字符串识别为一个变量。那么,在通过SSH进行连接时,是否有其他方法使用用户名中的变量 我已经看到了SSH-Perl模块,但是如果有其他解决方案,我希望避免使用其他模块 提前谢谢你 逃生信号卢克: my $result = `ssh $user\@machine`; 没有数组@machine,不是吗 反勾号是。(我建

在我的Perl脚本中,我希望通过

my $result = `ssh $user@machine`;
其中$user是当前计算机上的用户名。但是,这显然不起作用,因为Perl将整个字符串识别为一个变量。那么,在通过SSH进行连接时,是否有其他方法使用用户名中的变量

我已经看到了SSH-Perl模块,但是如果有其他解决方案,我希望避免使用其他模块

提前谢谢你

逃生信号卢克:

my $result = `ssh $user\@machine`;
没有数组
@machine
,不是吗

反勾号是。(我建议使用generic
qx{}
version而不是惯用的backticks。)它插入(除非您使用
qx'
)内容,以便将
@machine
插入为
machine
数组的内容。它通过
$“
变量,默认为空格。如果您没有定义
@machine
变量,并且没有
使用strict将其插入为空字符串,如果没有
使用警告,则不会发出警告
-W
提供了参数。

您需要将字符串中的“@”转义为数组,并在变量user周围使用双引号

尝试:

尝试: 我的$result=
ssh${user}\@machine

当你有多个变量时,你可以用{}来表示它们是不同的 比如:${user1}{user2}

Perl将整个字符串识别为一个变量

不,这不是问题所在。问题在于,除了将
$user
解析为变量外,它还将
@machine
解析为变量

这只是一个逃避特殊角色的问题

my $result = `ssh $user\@machine`;

如果问题真的是需要传递变量的结尾,那么可以使用卷曲

my $count = 4;
my $item = 'book';
print("$count $items\n");     # XXX
print("$count ${item}s\n");   # 4 books
这应该是可行的:

`ssh "${user}"@"${machine}"`;

使用严格;使用警告它有多大帮助1不,这只是如何用ssh连接到远程计算机的语法。@Alex,>>>“但是这显然不起作用,因为Perl将整个字符串识别为一个变量。”-在@(转义)之前使用“\”,是使Perl不将其视为数组的一种方法。@Alex不使用
使用strict
backtick将
@machine
扩展为数组
@machine
的内容,即使它不存在,结果也是空字符串。如果
@machine
中有一些内容,则会将其插入其中。试试perl-e'my@a=qw(foo-bar-baz);仅当变量名后面的字符是有效的变量字符时,才需要打印“echo@a`
@
在数组变量(或切片或数组解引用等)开头以外的任何位置都无效,因此在这种情况下无需将
用户
包装到
{}
中。当然,这不会造成任何伤害,但不需要混淆实际问题,即需要转义的
@
。引号完全没有必要。它们完全没有作用。
`ssh "${user}"@"${machine}"`;