Переменная внутри Zenity внутри `sh -c` игнорируется - PullRequest
0 голосов
/ 14 сентября 2011

Сценарий ниже должен открыть окно ввода, чей начальный текст записи равен $filename, но секция zenity в третьей строке игнорирует эту переменную, и я не получаю текст записи.

Кстати, если я просто заменю filename на whoami, мое имя пользователя будет отображаться как положено. Однако я не могу получить результат, используя свои собственные переменные. Вот в чем проблема.

#!/bin/bash
filename="duck"
sh -c 'chromium-browser "https://duckduckgo.com/?q=%5C$(zenity --entry --text "I am feeling ducky" --entry-text $(filename))"'

И если бы я удалил материал sh -c, чтобы получить приведенный ниже код, моя переменная работала бы с zenity.

#!/bin/bash
filename="duck"
zenity --entry --text "I am feeling ducky" --entry-text $filename

Есть какие-нибудь подсказки, почему? Я пытался играть с различными комбинациями цитат, но мои усилия были тщетны.

1 Ответ

2 голосов
/ 14 сентября 2011

В нотации $(filename) выполняется команда 'filename'.

Чтобы развернуть переменную, используйте ${filename}.

Также обратите внимание, что, если $filename не является экспортированной переменнойсуб-оболочка (та, которая запускает опцию -c) не увидит значение переменной (из-за одинарных кавычек).

Чтобы исправить это, вам придется использовать двойные кавычки- довольно осторожно:

#!/bin/bash
filename="duck"
sh -c "chromium-browser \"https://duckduckgo.com/?q=%5C$(zenity --entry --text \"I am feeling ducky\" --entry-text ${filename})\""
...