Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: bash обработка переменных. Возможна ли?  (Прочитано 860 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Aday

  • Автор темы
  • Гость
Здравствуйте!
Вопрос для знатоков баша.
Имеется код:
(Нажмите, чтобы показать/скрыть)

Значит. Первая строка - объявление переменной содержащей команду Зенети.
Далее вторая строка эту команду выполняет. Все хорошо. И менять эти строки нельзя.
А вот третья строка должна распечатать эту комадну в echo. И нечего не печатает!
Понятно что и не будет печатать т.к. переменная содержит кавычки, много кавычек.
Но менять строки 1-2 нельзя - иначе команда не выполнится.
Вот тут вопрос: как можно обработать переменную и добавить слеши перед кавычками чтобы потом распечатать?

ПС: sed 's/\"/ /g' не работает с переменными, а только с файлами. Конечно можно выгрузить в файл, потом cat и sed. Но это громоздкий вариант. Не предлагать.

Оффлайн absent

  • Активист
  • *
  • Сообщений: 368
  • Ubuntu 16.04
    • Просмотр профиля
Re: bash обработка переменных. Возможна ли?
« Ответ #1 : 05 Май 2016, 17:36:43 »
У вас выполнение команды происходит в первой строке. Насколько я вижу, там обрамление тильдой?

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5660
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: bash обработка переменных. Возможна ли?
« Ответ #2 : 05 Май 2016, 17:42:11 »
Первая строка — выполнение команды
Вторая строка — выполняет команду, записанную под аргументом введенной в zenity, а поскольку оно ничего не вводит, то ничего и не делает
Третья строка — печатает "[OK]   Команда  " без кавычек.
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Aday

  • Автор темы
  • Гость
Re: bash обработка переменных. Возможна ли?
« Ответ #3 : 05 Май 2016, 18:55:50 »
У вас выполнение команды происходит в первой строке. Насколько я вижу, там обрамление тильдой?
Нет. В первой строке команда вносится в переменную stage9. Выполнение происходит во второй строке.

Пользователь добавил сообщение 05 Май 2016, 18:58:48:
Первая строка — выполнение команды
Вторая строка — выполняет команду, записанную под аргументом введенной в zenity, а поскольку оно ничего не вводит, то ничего и не делает
Третья строка — печатает "[OK]   Команда  " без кавычек.
Пробовал без кавычек. Все равно команду не печатает.
« Последнее редактирование: 05 Май 2016, 18:58:48 от CodeMan »

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 5660
  • elementaryOS 0.4 Loki, i3wm on Debian9
    • Просмотр профиля
Re: bash обработка переменных. Возможна ли?
« Ответ #4 : 05 Май 2016, 20:34:36 »
Нет. В первой строке команда вносится в переменную stage9. Выполнение происходит во второй строке.
Вот интересно, если Вы знаете больше всех, зачем тогда задаёте здесь вопросы?
Ещё раз повторяю: команда выполняется в первой строке и результат её выполнения присваивается переменной stage9. Поскольку результата нет, то и переменная пуста.
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Aday

  • Автор темы
  • Гость
Re: bash обработка переменных. Возможна ли?
« Ответ #5 : 05 Май 2016, 20:41:27 »
Нет. В первой строке команда вносится в переменную stage9. Выполнение происходит во второй строке.
Вот интересно, если Вы знаете больше всех, зачем тогда задаёте здесь вопросы?
Ещё раз повторяю: команда выполняется в первой строке и результат её выполнения присваивается переменной stage9. Поскольку результата нет, то и переменная пуста.
По моему выполнение будет, если строка будет такого вида:

stage9=$(zenity --info --title="Anacron tbackup.sh" --text="Автоматическое архивирование  выполнено: вариант ${ChoiceNamber}.")

А так это просто строка.
В любом случае спасибо за подсказку, буду дальше думать.

Punko

  • Автор темы
  • Гость
Re: bash обработка переменных. Возможна ли?
« Ответ #6 : 05 Май 2016, 22:27:41 »
CodeMan, нет. Обратные кавычки ``  действует точно также, как и $(command).
Проще говоря, обралмение обратными кавычками запустит программу. Сейчас не рекомендуют их использовать.

Aday

  • Автор темы
  • Гость
Re: bash обработка переменных. Возможна ли?
« Ответ #7 : 06 Май 2016, 08:47:18 »
CodeMan, нет. Обратные кавычки ``  действует точно также, как и $(command).
Проще говоря, обралмение обратными кавычками запустит программу. Сейчас не рекомендуют их использовать.
Перед закрытием вопроса. А можно ли сделать чтобы в stage9 была команда в виде текста, а потом его второй строкой выполнить? Или это никак не получится?

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3096
  • Ubuntu Mate 16.04 х64
    • Просмотр профиля
Re: bash обработка переменных. Возможна ли?
« Ответ #8 : 06 Май 2016, 10:07:51 »
#!/bin/sh

ChoiceNumber=$1

stage9="zenity --info --title='Anacron tbackup.sh' --text='Автоматическое архивирование  выполнено: вариант ${ChoiceNumber}.'"

${stage9} # выполение команды

echo "[OK]   Команда ${stage9}"
Fujitsu UH552: Intel Core i3-3217U, 16GB DDR3 1600MHz, Intel HD4000, Intel 535 120GB/Ubuntu 16.04 Mate
HP 625: AMD Athlon P320, 4GB DDR3 1333MHz, AMD HD4250, Seagate Momentus/Ubuntu 14.04 Mate

Aday

  • Автор темы
  • Гость
Re: bash обработка переменных. Возможна ли?
« Ответ #9 : 06 Май 2016, 11:26:21 »
#!/bin/sh

ChoiceNumber=$1

stage9="zenity --info --title='Anacron tbackup.sh' --text='Автоматическое архивирование  выполнено: вариант ${ChoiceNumber}.'"

${stage9} # выполение команды

echo "[OK]   Команда ${stage9}"
Увы, текст полностью не читается. Короче, то текст полностью не отображается. Сделаешь чтобы отображался - переменная в echo пропадает.
« Последнее редактирование: 06 Май 2016, 11:28:54 от CodeMan »

Оффлайн EvangelionDeath

  • Администратор
  • Старожил
  • *
  • Сообщений: 3096
  • Ubuntu Mate 16.04 х64
    • Просмотр профиля
Re: bash обработка переменных. Возможна ли?
« Ответ #10 : 06 Май 2016, 11:52:11 »
/fixed
#!/bin/sh

ChoiceNumber=$1

stage9="zenity --info --title='Anacron tbackup.sh' --text='Автоматическое архивирование  выполнено: вариант ${ChoiceNumber}.'"

/bin/sh -c "${stage9}" # выполение команды

echo "[OK]   Команда ${stage9}"
Fujitsu UH552: Intel Core i3-3217U, 16GB DDR3 1600MHz, Intel HD4000, Intel 535 120GB/Ubuntu 16.04 Mate
HP 625: AMD Athlon P320, 4GB DDR3 1333MHz, AMD HD4250, Seagate Momentus/Ubuntu 14.04 Mate

Aday

  • Автор темы
  • Гость
Re: bash обработка переменных. Возможна ли?
« Ответ #11 : 06 Май 2016, 14:23:54 »
EvangelionDeath, Спасибо. Теперь все заработало. С Наступающими Вас и всех участвовавших в теме праздником! :)

Оффлайн absent

  • Активист
  • *
  • Сообщений: 368
  • Ubuntu 16.04
    • Просмотр профиля
Re: bash обработка переменных. Возможна ли?
« Ответ #12 : 06 Май 2016, 18:06:24 »
для выполнения переменной можно сделать
eval $stage9

 

Страница сгенерирована за 0.077 секунд. Запросов: 24.