exec $ {PERL-perl} -Sx $ 0 $ {1 +“ $ @”}在Shell脚本中是什么意思?

时间:2018-10-12 18:30:51

标签: python python-3.x shell perl scripting

我被赋予了将包含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命令中其余的参数做什么?

1 个答案:

答案 0 :(得分:4)

${PERL-perl}parameter expansion:如果未设置PERL shell变量,请使用perl,否则请使用PERL的内容。 (可以说这应该是${PERL:-perl},因为如果设置了PERL但为空,则将使用空字符串。)

${1+"$@"}代表“如果设置了$1,则使用"$@"(所有位置参数),否则替换为null”。这是一种针对较早的shell的技巧,如果没有位置参数,它们会被"$@"所迷惑,并扩展为单个参数而不是根本没有。 Bash只能使用"$@"

有关perl的选项,请参见perldoc perlrun