' sh -c '中的Zenity变量被忽略



下面的脚本应该打开一个输入框,它的初始entry-text是$filename的值,但是第三行的zenity部分忽略了这个变量,所以最后没有entry-text。

顺便说一下,如果我只是用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选项的那个)将看不到变量的值(因为有单引号)。

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

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

相关内容

  • 没有找到相关文章

最新更新