Я не знаю сценария оболочки. Может ли кто-нибудь объяснить, что это значит?
exec python2.7.1 "${BASEDIR}/../foo/foo.py" ${1+"[email protected]"}
Я думаю, что это выполнит файл foo.py внутри папки foo. Но в чем смысл ${1+"[email protected]"}
?
Я не знаю сценария оболочки. Может ли кто-нибудь объяснить, что это значит?
exec python2.7.1 "${BASEDIR}/../foo/foo.py" ${1+"[email protected]"}
Я думаю, что это выполнит файл foo.py внутри папки foo. Но в чем смысл ${1+"[email protected]"}
?
[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]
, иначе ничего не пропустите».
'$ {... + ...}' - [синтаксис альтернативного значения] (http://www.tldp.org/LDP/abs/html/parameter-substitution.html#PARAMALTV). Он передает пустую строку, если аргументы не заданы. –
Обновлен мой ответ, спасибо @Wander! –
'echo $ @' - очень плохая практика - рассмотрите 'printf '% s \ n' $ @' vs 'printf '% s \ n'" $ @ "' с любым интересным содержимым (например, 'set - 'hello '' '' '' жестокий мир '', устанавливая '$ @' значение как с символами пробела, так и с глобусом), чтобы продемонстрировать, почему: без кавычек строковая оболочка оболочки и glob-расширяет содержимое перед их передачей. Таким образом, с '$ @' вы получаете список всех имен файлов в вашем текущем каталоге, и пробел между «жестоким» и «миром» становится новой линией, но с '' $ @ "' вы получаете все, что должным образом сохраняется, как вошел. –
Я не могу придумать какой-либо веской причины использовать это только через '' $ @ "'. –