问题是在单引号内,没有特殊的元字符,所以$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
程序是否对其参数周围的引号类型敏感。它只是颠倒了双引号和单引号的使用。(就外壳而言,这有效。Gordon Davisson在需要双引号且不接受单引号的注释中观察到osascript
,因此由于被调用程序的规则,它不起作用 - osascript
。)
在第三种和第四种情况下,如果字符串的其他部分需要保护,则需要小心,以免 shell 扩展信息。一般来说,单引号更好,所以我会使用前两个选项之一。