Bash 忽略'sh-c'中Zenity内的变量

Bash 忽略'sh-c'中Zenity内的变量,bash,variables,zenity,Bash,Variables,Zenity,下面的脚本应该打开一个输入框,其初始输入文本是$filename的值,但是第三行中的zenity部分忽略了该变量,我最终没有输入文本 顺便说一句,如果我只是用whoami替换filename,我的用户名将按预期显示。不过,我无法使用自己的变量得到结果。这就是问题所在 #!/bin/bash filename="duck" sh -c 'chromium-browser "https://duckduckgo.com/?q=%5C$(zenity --entry --text "I am feel

下面的脚本应该打开一个输入框,其初始输入文本是
$filename
的值,但是第三行中的zenity部分忽略了该变量,我最终没有输入文本

顺便说一句,如果我只是用
whoami
替换
filename
,我的用户名将按预期显示。不过,我无法使用自己的变量得到结果。这就是问题所在

#!/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
有什么线索说明原因吗?我尝试使用不同的引号组合,但我的努力徒劳。

符号
$(filename)
运行命令“filename”

要展开变量,请使用
${filename}

还要注意的是,除非
$filename
是导出的变量,否则子shell(运行
-c
选项的子shell)将看不到变量的值(因为有单引号)

要解决这个问题,您必须使用双引号-相当小心:

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

非常感谢你的回答。它绝对完美。