【问题标题】:How to escape single quote in appleScript/shell?如何在 appleScript/shell 中转义单引号?
【发布时间】:2016-07-24 17:37:41
【问题描述】:

我看过这个话题:single quote escaping in applescript/shell 虽然很有帮助,但并不能完全解决我的问题。这个 AppleScript sn-p 说明了这个问题:

set lastName to "O'Donnell"
set lastScript to "/usr/libexec/PlistBuddy /Users/david/.name.plist -c 'Set Last '" & quoted form of (lastName & "'")
display dialog lastScript
do shell script lastScript

我的主文件夹中的属性列表文件“.name.plist”包含一个键“Last”,用于存储名称“O'Donnell”。变量 lastScript 被传递为:

/usr/libexec/PlistBuddy /Users/david/.name.plist -c 'Set Last ''O'\''Donnell'\'''

脚本执行,但“Last”设置为“ODonnell”,没有重要的撇号。这可以通过在 shell 中运行以下命令来演示:

/usr/libexec/PlistBuddy /Users/david/.name.plist -c 'Print Last'

PlistBuddy 可以在交互模式下运行:

/usr/libexec/PlistBuddy /Users/david/.name.plist

命令:

'Set Last O\'Donnell' 

成功保存名称。我做错了什么?

【问题讨论】:

  • 你已经回答了你的问题,包含双引号的唯一方法是转义它。
  • 我测试了你的脚本,它似乎有效,我只是 display dialoged 引用的部分,然后在终端中回显它,它有效

标签: bash shell applescript


【解决方案1】:

你的逃跑搞砸了。将文本值放在双引号中以使 PlistBuddy 满意,然后单引号整个 -c 参数以使 bash 满意:

to escapeDoubleQuotes(txt)
  set AppleScript's text item delimiters to "\\"
  set lst to txt's text items
  set AppleScript's text item delimiters to "\\\\"
  set txt to lst as text
  set AppleScript's text item delimiters to "\""
  set lst to txt's text items
  set AppleScript's text item delimiters to "\\\""
  return lst as text
end escapeDoubleQuotes

set lastName to "O'Donnell"

"/usr/libexec/PlistBuddy /Users/david/.name.plist -c " & quoted form of ("Set Last " & escapeDoubleQuotes(lastName))

--> "/usr/libexec/PlistBuddy /Users/david/.name.plist -c 'Set Last \"O'\\''Donnell\"'"

【讨论】:

    猜你喜欢
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多