Что означает exec $ {PERL-perl} -Sx $ 0 $ {1 + "$ @"} в сценарии оболочки? - PullRequest
0 голосов
/ 12 октября 2018

Мне дано задание преобразовать сценарий оболочки, который содержит сценарий Shell, код Perl в Python.

Мне удалось преобразовать код Perl в Python.

Но есть такой оператор сценария оболочки, который я не понял.

#! /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 голосов
/ 12 октября 2018

${PERL-perl} - это расширение параметра : если переменная оболочки PERL не установлена, используйте perl, иначе используйте содержимое PERL.(Возможно, это должно быть ${PERL:-perl}, потому что, если PERL установлено, но пусто, будет использоваться пустая строка.)

${1+"$@"} означает "если установлено $1, используйте "$@" (все позиционные параметры), иначе подставьте ноль ".Это хак для старых оболочек, которые путаются с "$@", если нет позиционных параметров и расширяются до одного параметра, а не вовсе.Bash вместо этого будет работать с "$@".

Параметры perl см. perldoc perlrun.

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...