0

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

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

#!/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

关于为什么的任何线索?我尝试使用不同的引号组合,但我的努力是徒劳的。

4

1 回答 1

2

该符号$(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})\""
于 2011-09-14T04:22:27.150 回答