Zenity 中 `sh -c` 内的变量被忽略
下面的脚本应该打开一个输入框,其初始输入文本是 $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
有什么线索可以解释为什么吗?我尝试使用不同的报价组合,但我的努力是徒劳的。
The script below should open an entry box whose initial entry-text is the value of $filename
, but the zenity section in the third line ignores that variable and I end up with no entry-text.
By the way, if I just replace filename
by whoami
, my username will appear as expected. I'm not able to get a result using my own variables, though. That's the problem.
#!/bin/bash
filename="duck"
sh -c 'chromium-browser "https://duckduckgo.com/?q=%5C$(zenity --entry --text "I am feeling ducky" --entry-text $(filename))"'
And if I removed the sh -c
stuff, to end up with the code below, my variable would work with zenity.
#!/bin/bash
filename="duck"
zenity --entry --text "I am feeling ducky" --entry-text $filename
Any clues as to why? I tried playing with different combination of quotes but my efforts were futile.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
符号
$(filename)
运行命令“filename”。要扩展变量,请使用
${filename}
。另请注意,除非
$filename
是导出变量,否则子 shell(运行-c
选项的 shell)将看不到该变量的值(因为单引号)。要解决这个问题,您必须使用双引号 - 相当小心:
The notation
$(filename)
runs a command 'filename'.To expand a variable, use
${filename}
.Note, too, that unless
$filename
is an exported variable, the sub-shell (the one that runs the-c
option) will not see the value of the variable (because of the single quotes).To fix that, you'd have to use double quotes - rather carefully: