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

2024-01-08

我的任务是将包含 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命令做什么?


${PERL-perl} is a 参数扩展 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02:如果PERLshell变量未设置,使用perl,否则使用的内容PERL。 (按理说,这应该是${PERL:-perl}, 因为如果PERL设置但为空,将使用空字符串。)

${1+"$@"}代表“如果$1已设置,使用"$@"(所有位置参数),否则替换 null”。这是对旧 shell 的一种 hack,这些 shell 会被"$@"如果没有位置参数并扩展为单个参数而不是根本没有。 Bash 只适用于"$@"反而。

对于选项perl, see perldoc perlrun https://perldoc.pl/perlrun.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Shell 脚本中的 exec ${PERL-perl} -Sx $0 ${1+"$@"} 是什么意思? 的相关文章

随机推荐