下面的脚本应该打开一个输入框,其初始输入文本是$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
有关原因的任何线索?我尝试使用不同的引号组合,但我的努力是徒劳的。
答案 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})\""