Цитирование проблем в bash [duplicate]

$s = "my name is ";

$s .= "keyur";

echo $s; 

результат:

my name is keyur
6
задан abelenky 13 November 2012 в 19:22
поделиться

2 ответа

Проблема заключается в том, что кавычки не обрабатываются после замены переменных. Итак, похоже, вы пытаетесь определить макрос с именем '_transaction_color.

Попробуйте использовать массив:

INSTALL_OPT=(-Uvh --define '_transaction_color 3')

then:

"$INSTALL_CMD" "${INSTALL_OPT[@]}" myPackage.rpm

Важно, чтобы ${INSTALL_OPT[@]} в двойных кавычках получить требуемое.

11
ответ дан John Kugelman 22 August 2018 в 23:55
поделиться
  • 1
    eval злой! – gniourf_gniourf 13 November 2012 в 19:55
  • 2
    Я буду только +1, если вы отредактируете сообщение и удалите предмет evil. Это ужасно! Просто оставьте одно с массивом, так как это единственная хорошая практика! – gniourf_gniourf 13 November 2012 в 20:02
  • 3
    Eval - это зло, если вы используете недоверенный пользовательский ввод. Если вы используете его своими собственными данными, это не так уж плохо. – Barmar 13 November 2012 в 20:09
  • 4
    +1 для ответа массива - это единственный способ правильно обрабатывать несколько слов, которые могут содержать пробелы. – glenn jackman 13 November 2012 в 20:11
  • 5
    @Nate Он выполняет повторное цитирование. Это объясняется в Массивы : если слово двойным кавычком, ... ${name[@]} расширяет каждый элемент имени до отдельного слова. – Barmar 3 July 2015 в 16:22

Это может быть проблема 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
0
ответ дан sampson-chen 22 August 2018 в 23:55
поделиться
  • 1
    Я подозреваю, что --define требует, чтобы имя и значение макроса находились в одном аргументе, поэтому это не сработает. – Barmar 13 November 2012 в 19:35
  • 2
    @Barmar Хорошая мысль, я не был слишком уверен в этой части; обновил мой ответ. – sampson-chen 13 November 2012 в 19:37
  • 3
    @ sampson-chen: Пробовал настройку IFS и разбил параметры, как вы описали. Результат: "-Uvh: неизвестный параметр". (Я не понимаю, почему ... но это ошибка, которую я получил) – abelenky 13 November 2012 в 19:40
  • 4
    @abelenky: Попробуйте удалить кавычки вокруг INSTALL_OPT='-Uvh' (или используя двойные кавычки). Кроме того, я использовал backticks вместо одиночных кавычек в своем первоначальном ответе по ошибке, если вы копируете и вставляете что-либо. – sampson-chen 13 November 2012 в 19:44
  • 5
    Я увидел обратные тики и предположил, что вы имели в виду регулярные тики (но я попытался сделать это в обоих направлениях). Похоже, что ответ Бармара работает; Спасибо за попытку. – abelenky 13 November 2012 в 19:46
Другие вопросы по тегам:

Похожие вопросы: