当前位置: 首页 > 知识库问答 >
问题:

终端Applescript无法转义报价

冯开诚
2023-03-14

当我试图在osascript命令中包含引号时,遇到了一个奇怪的问题。

如果我试着摆脱一个正常的可逃避角色,效果会很好。示例:osascript-e'告诉应用程序“Finder”显示对话框“Te\\st”Finder弹出一个对话框,其中包含文本Test

然而,当我在写完整的句子时尝试使用撇号时,问题就出现了。示例:osascript-e'告诉应用程序“Finder”显示对话框“Te'st”当我运行此程序时,只剩下没有对话框,终端中的文本输入如下所示:

据我所知,这绝对是可行的,但事实并非如此。


共有2个答案

孟智志
2023-03-14

你可以这样做:

osascript -e "tell app \"Finder\" to display dialog \"'Something' in quotes"\"
上官凯歌
2023-03-14

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

因为您使用的是osascript,所以首先应用的是shell(bash的)引用规则:

bash(或任何与POSIX兼容的shell)中,不能在单引号字符串中包含单引号,甚至不能使用转义。

但是,您可以做的是将字符串拆分为多个片段,并在需要时简单地用单引号拼接(在带引号的字符串外转义为\'):

osascript -e 'tell app "Finder" to display dialog "Te'\''st"'
  • '告诉app“Finder”显示对话框“Te”,第一部分后面是转义的单引号\',后面是字符串的剩余部分'st'
  • 由于各部分之间没有空格,bash创建了一个单独的字符串,其中包含拼接的文本

一般来说,将单引号字符串传递给osascript更容易,因为双引号在AppleScript中经常使用,因此当包含在双引号字符串中时,必须进行转义(如在接受的答案中)。

在通常不常见的情况下,您必须向AppleScript传递一个引号,您可以使用本答案中描述的技巧。

 类似资料:
  • 所以我试图一次从命令行运行多个Applescript命令。然而,无论我如何尝试,它都不会起作用: 有没有办法做到这一点,而不保存到文件?

  • 请先参考这个问题, 无法读取opensslv. h:没有这样的文件或目录 基于此,我需要使用AppleScript运行以下三行终端命令, 我尝试了两种方法,我创建了带有.命令和. sh扩展名的文本文件,并添加了上述三行。然后尝试从AppleScript运行它, 但我犯了这个错误, 这可能行得通, 但它在第三行的终端上请求密码,并等待用户响应。AppleScript中显示的密码对话框(当以管理员权限

  • 我正在尝试创建一个bash。sh脚本文件,使用osascript打开一个新的终端窗口/选项卡,然后运行两个命令“cd fs”和“gulp”(都在同一窗口/选项卡中) 这就是我正在尝试的,它在另一个(第三个)窗口/选项卡中运行第二个命令(做脚本“大口吃”),而不是打开的第二个。

  • 问题内容: 为了回答这个问题,我设法通过转义反斜杠来使字符串成为转义字符。 当我尝试将其概括为转义所有转义的字符时,它似乎无能为力: 但是对于特定的转义字符使用相同的方法,它确实起作用: 有一般的方法可以做到这一点吗?应包括,,,等。 问题答案: 使用r’text’将字符串定义为raw,如下面的代码所示:

  • 问题内容: 我正在从https://scotch.io/tutorials/authenticate-a-node-js-api-with-json-web- tokens 进行node.js服务器设置。我是node.js的新手。我正在安装。但是当我用这个运行服务器时。 在显示的终端中: 无法将nodemon识别为内部或外部命令,可操作程序或批处理文件 命令正在运行并启动了服务器,但是命令不起作用

  • 我安装mercurial使用sudo apt-get安装mercurial和它安装正确。但是当我运行任何hg命令时,我都会收到以下错误消息- 中止:在中找不到mercurial库3.3.3.2.2-3.2-3.2.2.2-3.2.2-3.2-3.2-3.2-2.2-3.2-3.3.4-4.4.4.4.4/7/7/7/7/7/7/7/7/4.4/7/7/4.3.2.2.2-3.2-3.2-3.2-3