Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何在appleScript/shell中转义单引号?_Bash_Shell_Applescript - Fatal编程技术网

Bash 如何在appleScript/shell中转义单引号?

Bash 如何在appleScript/shell中转义单引号?,bash,shell,applescript,Bash,Shell,Applescript,我已经研究过这个话题:虽然它很有帮助,但并不能完全解决我的问题。此AppleScript代码段说明了问题: 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

我已经研究过这个话题:虽然它很有帮助,但并不能完全解决我的问题。此AppleScript代码段说明了问题:

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”设置为“odonell”,不带重要撇号。通过在shell中运行以下命令可以演示这一点:

/usr/libexec/PlistBuddy /Users/david/.name.plist -c 'Print Last'
PlistBuddy可以在交互模式下运行:

/usr/libexec/PlistBuddy /Users/david/.name.plist
命令:

'Set Last O\'Donnell' 

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

你的逃跑搞砸了。将文本值用双引号引起来以保持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\"'"

您已经回答了您的问题,包含双引号的唯一方法是将其转义。我测试了您的脚本,它似乎正常工作,我只是
显示对话框
对引用的部分进行了复制,然后在终端中进行了回显,它正常工作