AppleScript中curl命令多引号转义失败问题求助
解决AppleScript中curl命令变量引用的问题
你的问题核心有两个:一是多个do shell script是独立的shell会话,环境变量无法共享,二是错误地把AppleScript语法写进了shell字符串里,导致quoted form of output被当成字面量执行。下面一步步给你修正和解释:
先拆解原代码的问题
- 第一个
do shell script ("export TRIAL_1=" & trial_1)完全无效——每个do shell script都会启动一个全新的shell进程,这个进程结束后,export的变量就消失了,下一个curl命令根本拿不到这个值。 - 你把
quoted form of output直接写在curl的JSON字符串里,shell会把它当成普通文本,而不是AppleScript的变量处理逻辑,而且这里的output还是第一个命令的空返回值(export没有输出),完全不符合预期。
修正后的代码方案
方案1:安全处理特殊字符的写法(推荐)
这种写法会用AppleScript的quoted form of处理整个JSON参数,避免路径里的空格、引号等特殊字符导致shell解析错误:
set trial_1 to "/somepath" -- 先在AppleScript层面拼接好完整的JSON字符串 set jsonPayload to "{\"desiredCapabilities\":{\"xcodeConfigFile\":\"" & trial_1 & "\"}}" -- 把JSON参数用quoted form包裹后传给curl set curlOutput to do shell script "curl -H 'Content-Type: application/json' -X POST -d " & quoted form of jsonPayload & " http://localhost:4723/wd/hub/session"
方案2:直接拼接字符串(适合无特殊字符的路径)
如果你的路径trial_1里没有空格、引号这类特殊字符,也可以直接把变量嵌入shell命令字符串:
set trial_1 to "/somepath" set curlOutput to do shell script "curl -H 'Content-Type: application/json' -X POST -d '{\"desiredCapabilities\":{\"xcodeConfigFile\":\"" & trial_1 & "\"}}' http://localhost:4723/wd/hub/session"
关键知识点提醒
- 所有
do shell script都是独立的shell进程,不要试图用export传递变量,直接在AppleScript里拼接好完整命令再执行。 - AppleScript的语法(比如
quoted form of)要写在shell字符串外面,不能嵌套进shell的单/双引号里。 - 当字符串里包含特殊字符时,一定要用
quoted form of处理,避免shell把特殊字符当成命令解析。
内容的提问来源于stack exchange,提问作者drafts man
相关产品推荐
相关产品推荐

