我如何处理(例如,正确转义)“默认写入...”键值的paren?


2

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>。但我真的很想深入了解这一点。

Answers:


4

要在默认命令中成功转义括号,您必须使用引号并将引号内的单引号引起来:

例:

defaults write com.apple.screencapture location "'/Users/user/Desktop/(Screenshots)'"

真可惜,单人内双必须是我没有尝试过的一件事!谢谢。实际上,我当然曾经尝试过双打单打,但实际上似乎也可行。不幸的是,这在当时并不适合我,但是似乎我通过有时不提供完整路径的dirname(认为该路径仍然由外壳程序提供)而使问题更加复杂。
tkp
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.