我正在创建一个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而不是。我知道我必须做一些事情来逃避引号,所以脚本可以输入变量,但我不确定如何。
思想?
答案 0 :(得分:5)
问题是在单引号内,没有特殊的元字符,因此$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 Davisson在comment中观察到osascript
需要双引号并且不接受单引号,因此它不起作用,因为规则调用的程序 - osascript
。)
在第三种情况和第四种情况下,如果字符串的其他部分需要保护,则需要小心,以便shell不会扩展信息。一般来说,单引号更好,所以我会使用前两个选项中的一个。
答案 1 :(得分:1)
来自没有变量替换的范围的单引号。
osascript -e "tell application \"System Events\" to keystroke \"$monday1\""; \
答案 2 :(得分:0)
将整个字符串用单引号括起来可以防止变量monday1
被插值。切换双引号和单引号:
osascript -e "tell application 'System Events' to keystroke '$monday1'";