在perl脚本中使用环境变量

ibr*_*him 2 variables shell environment perl

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

system ("bsub xyz +OPTIONS_GATE=$GATE")
Run Code Online (Sandbox Code Playgroud)

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

"No arguments supplied for option group OPTIONS_GATE instance". 
Run Code Online (Sandbox Code Playgroud)

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

TLP*_*TLP 8

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

system ("bsub xyz +OPTIONS_GATE=$ENV{GATE}")
Run Code Online (Sandbox Code Playgroud)

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

system ("bsub xyz +OPTIONS_GATE=\$GATE")
Run Code Online (Sandbox Code Playgroud)

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

system ('bsub xyz +OPTIONS_GATE=$GATE')
Run Code Online (Sandbox Code Playgroud)

请注意,如果您已经使用过

use strict;
use warnings;
Run Code Online (Sandbox Code Playgroud)

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

Global symbol "$GATE" requires explicit package name
Execution of script.pl aborted due to compilation errors.
Run Code Online (Sandbox Code Playgroud)

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.
Run Code Online (Sandbox Code Playgroud)

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

  • shell仍会插入而不进行转义,所以最好的是`system('bsub xyz + OPTIONS_GATE ="$ GATE"')`或`system('bsub','xyz','+ OPTIONS_GATE ='.$ ENV { $ GATE})` (3认同)