Переменная внутри Zenity внутри `sh -c` игнорируется
Сценарий ниже должен открыть окно ввода, чей начальный текст записи является значением $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 ответ
Запись $(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})\""