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

Proper backslash definition in a -string (macOS defaults write via shell)

我正在尝试从终端设置 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";}

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

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

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

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

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

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

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

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

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

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