$s = "my name is ";
$s .= "keyur";
echo $s;
результат:
my name is keyur
Проблема заключается в том, что кавычки не обрабатываются после замены переменных. Итак, похоже, вы пытаетесь определить макрос с именем '_transaction_color
.
Попробуйте использовать массив:
INSTALL_OPT=(-Uvh --define '_transaction_color 3')
then:
"$INSTALL_CMD" "${INSTALL_OPT[@]}" myPackage.rpm
Важно, чтобы ${INSTALL_OPT[@]}
в двойных кавычках получить требуемое.
Это может быть проблема bash с разбиением слова на пробел:
Попробуйте:
#!/bin/bash
IFS=$'\n'
INSTALL_CMD=rpm
INSTALL_OPT='-Uvh'
INSTALL_OPT_DEFINE='--define _transaction_color 3'
${INSTALL_CMD} ${INSTALL_OPT} ${INSTALL_OPT_DEFINE} myPackage.rpm
--define
требует, чтобы имя и значение макроса находились в одном аргументе, поэтому это не сработает.
– Barmar
13 November 2012 в 19:35
INSTALL_OPT='-Uvh'
(или используя двойные кавычки). Кроме того, я использовал backticks вместо одиночных кавычек в своем первоначальном ответе по ошибке, если вы копируете и вставляете что-либо.
– sampson-chen
13 November 2012 в 19:44
eval
злой! – gniourf_gniourf 13 November 2012 в 19:55+1
, если вы отредактируете сообщение и удалите предметevil
. Это ужасно! Просто оставьте одно с массивом, так как это единственная хорошая практика! – gniourf_gniourf 13 November 2012 в 20:02${name[@]}
расширяет каждый элемент имени до отдельного слова. – Barmar 3 July 2015 в 16:22