终端的苹果脚本无法转义引号

4
我在尝试使用osascript命令时遇到了一个奇怪的问题,当我想要包含引号' '时。如果我尝试转义普通可转义字符,它可以正常工作。例如:osascript -e 'tell app "Finder" to display dialog "Te\\st"' Finder中弹出一个对话框,其中包含文本Test。然而,当我试图在写完整句子时使用撇号时,问题就出现了。例如:osascript -e 'tell app "Finder" to display dialog "Te\'st"' 运行此命令后,我没有看到对话框,终端中的文本输入如下所示:> 据我所知,这应该能够正常工作,但事实并非如此。
2个回答

7

补充一下 @Zero 的有用答案(这确实解决了问题):

既然你正在使用osascript,那么首先应该遵循 shell(bash)的引用规则:

bash (或任何符合 POSIX 的 shell 中),你不能在单引号字符串中包含单引号 - 即使进行转义也不行。

然而,你可以将字符串分成多个部分,并在需要时简单地插入单引号 (在引号外部进行转义为 \'):

osascript -e 'tell app "Finder" to display dialog "Te'\''st"'
  • 'tell app "Finder" to display dialog "Te',第一部分后面跟着转义单引号\',然后是字符串的剩余部分'st"'
  • 由于各个部分之间没有空格,bash创建了一个包含插入文字 ' 的字符串。

通常情况下,将单引号字符串传递给osascript更加容易,因为双引号在AppleScript中经常使用,因此当它们被包含在双引号字符串中时必须进行转义(如接受的答案所示)。

在通常很少需要将单引号传递给AppleScript的情况下,您可以使用本答案中描述的技术。


3
您可以这样做:
osascript -e "tell app \"Finder\" to display dialog \"'Something' in quotes"\"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接