如何在AppleScript中转义shell参数?

cwd*_*cwd 5 macos applescript arguments escaping

Applescript似乎没有正确地逃避字符串.我究竟做错了什么?

例:

set abc to "funky-!@#'#\"chars"
display dialog abc
display dialog quoted form of abc
Run Code Online (Sandbox Code Playgroud)

预期/期望的产出:

funky-!@#'#"chars
'funky-!@#\'#"chars'
Run Code Online (Sandbox Code Playgroud)

实际产量:

funky-!@#'#"chars
'funky-!@#'\''#"chars'
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,似乎在实际输出中Applescript正在添加和转义额外的内容 '

我将与结束字符的是其中有OK '或者",我也将是罚款与被转义两个单引号和双引号-但它似乎只有单引号实际上逃脱.

Lri*_*Lri 9

反斜杠通常不会在shell中的单引号内解释.

用单引号括起字符可保留单引号内每个字符的字面值.单引号内不能出现单引号.

反斜杠不能用于转义在单引号中设置的字符串中的单引号.可以通过写入来创建嵌入的引号,例如:'a'\''b',其产生'b'.

然而,它们是由shin中的echo解释的,它是由do shell script以下所用的shell :

do shell script "echo " & quoted form of "\\t" --> "\t"
Run Code Online (Sandbox Code Playgroud)

取消设置xpg_echo使其行为类似于bash中的echo:

do shell script "shopt -u xpg_echo; echo " & quoted form of "\\t" --> "\\t"
Run Code Online (Sandbox Code Playgroud)

通常,使用HEREDOC重定向更简单:

do shell script "rev <<< " & quoted form of "a\\tb" --> "b\\ta"
Run Code Online (Sandbox Code Playgroud)


reg*_*633 6

使用"引用形式".通常在applescript中我们处理一个"mac"样式路径,所以我们会做这样的事情将它传递给shell ...

set theFile to choose file
set dirname to do shell script "dirname " & quoted form of POSIX path of theFile
Run Code Online (Sandbox Code Playgroud)