-string 中正确的反斜杠定义(macOS 默认通过 shell 写入)

Posted

技术标签:

【中文标题】-string 中正确的反斜杠定义(macOS 默认通过 shell 写入)【英文标题】:Proper backslash definition in a -string (macOS defaults write via shell) 【发布时间】:2019-12-05 07:33:35 【问题描述】:

我正在尝试从终端设置 macOS 键盘快捷键 (ctrl+shift+up_arrow)。

从系统偏好设置手动创建后,我发现'^$\\U2191' 是我要查找的字符串。

所以:

defaults write com.hello.app NSUserKeyEquivalents -dict-add 'Test' -string '^$\\U2191'

但是,这是我通过运行 defaults read com.hello.app NSUserKeyEquivalents 得到的:

"Test" = "^$\\\\\\\\U2191";

为什么每个反斜杠都被重复两次?如何正确输入两个反斜杠?

【问题讨论】:

【参考方案1】:

事实证明,当涉及到特殊字符时,从 cli 编辑 plist 文件的唯一方法是包含特殊字符本身。

defaults write com.hello.app NSUserKeyEquivalents -dict-add 'Test' -string '^$↓'

我不知道其他键是如何处理的,但是PLIST Editor是第一次手动创建快捷方式后快速获取这些值的好方法。

【讨论】:

【参考方案2】:

-string 参数使用双引号 (") 而不是单引号 ('):

defaults write com.hello.app NSUserKeyEquivalents -dict-add 'Test' -string "^$\\U2191"

【讨论】:

您亲自尝试过吗?它对我不起作用,单/双引号不会改变任何东西。 是的。使用单引号,当您执行defaults read com.hello.app NSUserKeyEquivalents 时,您会得到Test = "^$\\\\\\\\U2191";。当你用双引号插入时,结果是:Test = "^$\\\\U2191";【参考方案3】:

在大多数基于 Posix 的语言中,包括在 MacOS 上使用的语言,反斜杠是保留字符。

要让解析器打印反斜杠,您需要输入两次反斜杠。

一些脚本和实用程序会假定您需要文字打印并插入双反斜杠代替反斜杠,以便进行文字打印,而不是查找字符。

您需要查看特定工具的文档。通常可以选择关闭此功能。

【讨论】:

以上是关于-string 中正确的反斜杠定义(macOS 默认通过 shell 写入)的主要内容,如果未能解决你的问题,请参考以下文章

JS去除字符串众的反斜杠

在从laravel ajax返回的json中的每个斜杠中获取额外的反斜杠“\”

MySQL 中的反斜杠 \,真是太坑了!!

windows和linux的差异:c++中的反斜杠和正斜杠

启动对象时类类型前的反斜杠[重复]

转义字符串中的反斜杠?