我被赋予了将包含Shell脚本,Perl代码的Shell脚本转换为Python的任务。
我设法将Perl代码转换为Python。
但是有一个我不理解的shell脚本语句。
#! /usr/bin/sh
exec ${PERL-perl} -Sx $0 ${1+"$@"}
#! /opt/tools/perl5/bin/perl
Some Perl code which I converted to Python
第二行是什么意思?
我了解到$0
将被评估为脚本名称。
我假设${PERL-perl}
可以评估计算机上安装的任何Perl解释器(如果我输入错了,请更正我,还请告诉我如何提及Python的类似内容)。
有人可以解释该exec
命令中其余的参数做什么?
答案 0 :(得分:4)
${PERL-perl}
是parameter expansion:如果未设置PERL
shell变量,请使用perl
,否则请使用PERL
的内容。 (可以说这应该是${PERL:-perl}
,因为如果设置了PERL
但为空,则将使用空字符串。)
${1+"$@"}
代表“如果设置了$1
,则使用"$@"
(所有位置参数),否则替换为null”。这是一种针对较早的shell的技巧,如果没有位置参数,它们会被"$@"
所迷惑,并扩展为单个参数而不是根本没有。 Bash只能使用"$@"
。
有关perl
的选项,请参见perldoc perlrun
。