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

发布于 2024-12-04 08:33:25 字数 593 浏览 0 评论 0原文

下面的脚本应该打开一个输入框,其初始输入文本是 $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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

苦妄 2024-12-11 08:33:25

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

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:

#!/bin/bash
filename="duck"
sh -c "chromium-browser \"https://duckduckgo.com/?q=%5C$(zenity --entry --text \"I am feeling ducky\" --entry-text ${filename})\""
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文