Ваша идея была правильной, но способ обработки необязательного аргумента неверен. Выражение, которое у вас есть
$([ ! -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[@]}"
Расширение массива создаст правильные строки аргумента, когда переменная определена, и расширится до нуля, когда переменная пуста.