TL; DR
在中defaults write <domain> <key> <value>
,我如何提供一个<value>
包含括号的;即“圆括号”,“(”和“)”?
全博纳
我defaults
用来将屏幕截图重定向到特定目录。我可以做的很好,过去有很多次,但是当目标目录的路径名带有括号时,我遇到了问题。所以我正在做类似的事情:
$ defaults write com.apple.screencapture location <dirname-with-parens-in-it>
我收到以下形式的错误:
<ba bla bla> Could not parse: <dirname-with-parens-in-it>. Try single-quoting it.
但是,尽管尝试了以下所有方法,我还是能做到这一点(还有更多尝试)。在这种情况下,假设所讨论的(现有)目录的名称实际上是dirname(with)parens。我的尝试和回应:
$ defaults write com.apple.screencapture location dirname\(with\)parens
<bla bla bla> Could not parse: dirname(with)parens. Try single-quoting it.
$ defaults write com.apple.screencapture location 'dirname\(with\)parens'
<bla bla bla> Could not parse: dirname(with)parens. Try single-quoting it.
然后,我重复了两次,每次三次,分别用\\,\\\和\\\\替换单个\。同样的错误。
但是请注意,该错误似乎暗示着外壳程序本身运行良好,因为“默认值”正确地看到了未转义的“(”和“)”。如果目录名/路径中不包含空格,而是包含空格,则使用简单的\ -escape即可(就像引用一样)。最后,我观察到对于\ m转义的括号或引用它们的shell命令(例如“ mkdir”)也有效:
$ mkdir dirname\(with\)parens
$ ls -ld dirname*
drwxr-xr-x 2 jonyive demigods 68 Oct 3 10:56 dirname(with)parens
因此,一个可能的嫌疑人defaults
本身就是。man defaults
并没有提供太多,仅说那是说:“值必须是属性列表,并且必须用单引号引起来”。甚至那都是谎言。实际上,如果包含任何时髦字符,则仅必须用单引号引起来;即使在此处,如果时髦字符是空格,也可以使用\-转义。当然,如果时髦是原谅,那么连单引号似乎都无法奏效。
那么,有什么想法吗?谢谢!
PS我知道,并已使用解决方法。例如,我可以创建一个到麻烦的实际目录的不麻烦的符号链接,并将defaults
符号链接指定为<value>
。但我真的很想深入了解这一点。