【问题标题】:using environment variable in the perl script在 perl 脚本中使用环境变量
【发布时间】:2014-09-25 11:17:07
【问题描述】:

我正在运行一个执行 shell 命令的 perl 脚本:

system ("bsub xyz +OPTIONS_GATE=$GATE")

这里$GATE 是我的环境变量。当我执行脚本时。它给出了错误

"No arguments supplied for option group OPTIONS_GATE instance". 

如何处理这个问题。提前致谢

【问题讨论】:

  • 始终使用use strict; use warnings;。如果发现很多错误,包括这个。

标签: perl shell variables environment


【解决方案1】:

$GATE 在双引号字符串中将被视为 Perl 变量。如果要使用环境变量,可以使用%ENV hash:

system ("bsub xyz +OPTIONS_GATE=$ENV{GATE}")

或者,您可以转义美元符号,这样 Perl 就不会将 $GATE 视为 Perl 变量:

system ("bsub xyz +OPTIONS_GATE=\$GATE")

或者使用单引号字符串,不插入变量:

system ('bsub xyz +OPTIONS_GATE=$GATE')

请注意,如果您使用过

use strict;
use warnings;

它会告诉你这个错误。 strict 会说:

Global symbol "$GATE" requires explicit package name
Execution of script.pl aborted due to compilation errors.

warnings 会说:

Name "main::GATE" used only once: possible typo at script.pl line 12.
Use of uninitialized value $GATE in string at script.pl line 12.

当您不使用use strict; use warnings; 时,您的错误不会被删除,它们只会对您隐藏,因此更难找到。因此,请始终使用这两个 pragma。

【讨论】:

  • shell仍然会插值而不转义,所以最好的其实是system('bsub xyz +OPTIONS_GATE="$GATE"')system('bsub', 'xyz', '+OPTIONS_GATE='.$ENV{$GATE})
猜你喜欢
  • 2017-10-26
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
  • 2020-04-05
相关资源
最近更新 更多