在`sh -c`中Zenity内的变量被忽略了

时间:2011-09-14 04:03:17

标签: bash variables zenity

下面的脚本应该打开一个输入框,其初始输入文本是$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 个答案:

答案 0 :(得分:2)

符号$(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})\""