gpt4 book ai didi

bash - 无法在 shell 脚本中转义引号

转载 作者:行者123 更新时间:2023-11-29 09:21:55 26 4
gpt4 key购买 nike

我正在制作一个 bash 脚本,它生成一些数字并将它们分配给变量,然后使用 osascript 在任何选择的应用程序中写出它们。

这是我想做的事情的简化版本。

monday1=5
osascript -e 'tell application "System Events" to keystroke "$monday1"'; \

osascript 应该是这样的

osascript -e 'tell application "System Events" to keystroke "5"'; \

这将在我的光标所在的任何应用程序中输入数字 5。问题是它输出 $monday1。我知道我必须做一些事情来转义引号,以便脚本可以输入变量,但我不确定如何。

想法?

最佳答案

问题是在单引号内,没有特殊的元字符,所以 $monday1 被原封不动地传递给了 osascript。因此,您必须确保 $monday1 不在单引号内。

您的选择包括:

monday1=5
osascript -e 'tell application "System Events" to keystroke "'$monday1'"'

monday1=5
osascript -e 'tell application "System Events" to keystroke "'"$monday1"'"'

monday1=5
osascript -e "tell application \"System Events\" to keystroke \"$monday1\""

monday1=5
osascript -e "tell application 'System Events' to keystroke '$monday1'"

第一个在双引号包围击键之后停止单引号,嵌入 $monday 的值,并为剩余的双引号恢复单引号。这是有效的,因为 $monday1 中没有空格等。

第二个与第一个类似,但用双引号将 "$monday1" 括起来,因此即使 $monday1 包含空格,它也能正常工作。

第三个用双引号将整个参数括起来,并转义每个嵌入的双引号。如果您对反斜杠不过敏,这很好。

第四个可能有效也可能无效 — 这取决于 osascript 程序是否对其参数周围的引号类型敏感。它只是颠倒了双引号和单引号的使用。 (就 shell 而言,这是有效的。Gordon Davissoncomment 中观察到 osascript 需要双引号并且不接受单引号,因此它不起作用,因为规则被调用的程序——osascript。)

无论是第三种还是第四种情况,都需要注意字符串中是否还有其他部分需要保护,以免shell扩展信息。一般来说,单引号更好,所以我会使用前两个选项之一。

关于bash - 无法在 shell 脚本中转义引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18535178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com