2016-06-28 2 views
0

Я не знаю сценария оболочки. Может ли кто-нибудь объяснить, что это значит?

exec python2.7.1 "${BASEDIR}/../foo/foo.py" ${1+"[email protected]"} 

Я думаю, что это выполнит файл foo.py внутри папки foo. Но в чем смысл ${1+"[email protected]"}?

+2

Я не могу придумать какой-либо веской причины использовать это только через '' $ @ "'. –

ответ

0

[email protected] является одной из встроенных переменных, используемых оболочкой для обработки аргументов командной строки скрипту. В сценарии:

$0 является командой, которая запустила сценарий

$1 является первым аргументом

$2 является вторым аргументом, и т.д. ...

$* список всех аргументов включая команду, которая запустила скрипт

[email protected] - список всех аргументов, не считая команды t hat запустил скрипт. Таким образом, если вся команда была:

myscript.sh glorf frolg flerg 

Тогда echo [email protected] отзовется:

glorf frolg flerg 

Я не уверен, что $ {1 ...} вещь о. Кажется, это не изменяет поведение. Он все еще просто отгоняет [email protected]. В основном то, что делает ваш скрипт, передает все свои аргументы в foo.py.

Хорошо, спасибо @Wander Nauta. Глядя here, вы можете видеть, что ${1+"[email protected]"} означает, «если $1 существует, пройдите [email protected], иначе ничего не пропустите».

+2

'$ {... + ...}' - [синтаксис альтернативного значения] (http://www.tldp.org/LDP/abs/html/parameter-substitution.html#PARAMALTV). Он передает пустую строку, если аргументы не заданы. –

+1

Обновлен мой ответ, спасибо @Wander! –

+0

'echo $ @' - очень плохая практика - рассмотрите 'printf '% s \ n' $ @' vs 'printf '% s \ n'" $ @ "' с любым интересным содержимым (например, 'set - 'hello '' '' '' жестокий мир '', устанавливая '$ @' значение как с символами пробела, так и с глобусом), чтобы продемонстрировать, почему: без кавычек строковая оболочка оболочки и glob-расширяет содержимое перед их передачей. Таким образом, с '$ @' вы получаете список всех имен файлов в вашем текущем каталоге, и пробел между «жестоким» и «миром» становится новой линией, но с '' $ @ "' вы получаете все, что должным образом сохраняется, как вошел. –