Вы должны получить двойные кавычки вокруг строки, являющейся eval
'ed (поэтому она заменит выражение ${}
, но не будет рассматривать символ новой строки как разделитель между командами).Это довольно сложно, так как нет чистого способа поместить двойные кавычки в двойные кавычки;но вы можете сделать это, поместив двойные кавычки в одинарных кавычках вокруг строки в двойных кавычках (о, и тогда я всегда помещаю двойные кавычки вокруг всего этого, даже если я не знаю, что это действительно необходимо):
CURRENT_YEAR=$(date "+%Y")
MESSAGE="$(eval echo '"'"$(/usr/libexec/PlistBuddy -c "Print NSHumanReadableCopyright" Info.plist)"'"')"
(Если у вас возникли проблемы с синтаксическим анализом, '"'
- двойная кавычка (защищенная одинарными кавычками, чтобы предотвратить ее оценку до тех пор, пока eval
не получит ее), "$(...)"
- эторезультат PlistBuddy (защищенный двойными кавычками), а затем '"'
- еще одна защищенная двойная кавычка.
После этого я думаю, что ваша команда PlistBuddy Set будет работать нормально, но мне пришлось заключить ее значения в кавычкираньше, так что на всякий случай:
/usr/libexec/PlistBuddy -c "Set NSHumanReadableCopyright '${MESSAGE//\'/\'}'" ${CONFIGURATION_BUILD_DIR}/${INFOPLIST_PATH}
(то, что делает, это помещает одинарные кавычки вокруг $ MESSAGE после экранирования любых встроенных одинарных кавычек.)