Как добавить дополнительные аргументы в команду на основе значения переменной? - PullRequest
1 голос
/ 27 марта 2020

Я пытаюсь сделать Gitlab CI / CD для сборки проекта unity3d автоматически, и я получил длинный аргумент для выполнения процедуры сборки. Теперь я хотел бы сделать сценарий более динамичным c для случая, когда некоторые аргументы на самом деле не нужны, например, для дифференцирования регистра android, который требует хранения ключей или нет.

Пока что я закончил с этим

/path/to/unity/unity -other args \
$([ ! -z $UNITY_ASSETS_EXPORT] && -assetPathNames $UNITY_ASSETS_EXPORT) 

, но он ничего не выводит, поэтому я должен использовать команду echo. Есть ли лучший способ для меня, чтобы я не засорял большую часть моего сценария echo для каждой переменной падежа?

Ответы [ 2 ]

1 голос
/ 27 марта 2020

Ваша идея была правильной, но способ обработки необязательного аргумента неверен. Выражение, которое у вас есть

$([ ! -z $UNITY_ASSETS_EXPORT ] && -assetPathNames $UNITY_ASSETS_EXPORT) 

, вычисляется ниже, когда установлена ​​переменная

$(-assetPathNames $UNITY_ASSETS_EXPORT)

, поскольку $(..) - это синтаксис подстановки команд, предназначенный для выполнения содержимого в виде команд, результат некорректно обрабатывается как команда для запуска.

Используйте заполнитель, такой как массив, для хранения аргументов и передачи его команде.

unity_arg=([ ! -z "$UNITY_ASSETS_EXPORT" ] && -assetPathNames "$UNITY_ASSETS_EXPORT")

и теперь передайте содержимое массива в ваша команда

/path/to/unity/unity -other args "${unity_arg[@]}"

Расширение массива создаст правильные строки аргумента, когда переменная определена, и расширится до нуля, когда переменная пуста.

1 голос
/ 27 марта 2020

echo определенно является одним из способов и остается наиболее гибким и, возможно, наиболее читаемым:

/path/to/unity/unity -other args \
$([ ! -z $UNITY_ASSETS_EXPORT ] && echo "-assetPathNames $UNITY_ASSETS_EXPORT")

Однако в этом простом случае вы можете использовать расширение переменных bash с конструкция ${parameter:+word}. Он расширяется до word, если parameter не пуст, в противном случае он расширяется до нуля:

/path/to/unity/unity -other args \
${UNITY_ASSETS_EXPORT:+-assetPathNames $UNITY_ASSETS_EXPORT}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...