AppleScript报错‘Expected end of line but found “{”’的原因及解决方法
解决AppleScript调用Terminal执行find脚本的语法错误
问题原因
报错Expected end of line but found “{”的核心原因是:
- AppleScript对字符串内部双引号的转义规则和Shell不同,你误用了Shell的反斜杠转义方式;
find命令-exec参数结尾的分号未在AppleScript字符串中正确转义。
修正后的代码
tell application "Terminal" do script "find . -maxdepth 1 -type d -exec sh -c 'echo \"{}: $(ls -1 \"\"{}\"\" | wc -l) file(s)\"' \\;" end tell
关键修改细节
- 转义内部双引号:将原代码中的
\"{}\"替换为\"\"{}\"\"。AppleScript用双引号包裹字符串,内部要表示单个双引号必须写两个连续双引号,这样传递给Shell后才会解析为正确的"{}"。 - 转义
find的结束分号:把原代码末尾的;改成\\;。AppleScript中反斜杠本身需要转义,所以两个反斜杠最终会被解析为一个反斜杠,传递给Shell的就是find命令要求的\;。
效果验证
修正后的代码会让Terminal执行和你手动运行完全一致的find命令,同时避免AppleScript的语法解析错误。
内容的提问来源于stack exchange,提问作者AlekNaomie BurtPilon
相关产品推荐
相关产品推荐

