我正在尝试使用 bash 更新 plist 文件。对于某些字符串,我可以更新 plist 文件,但对于某些字符串,我会收到错误。例如
defaults write '/Users/test/Desktop/myPlist' 'My Key' "[My Value]"
抛出错误
2011-08-10 18:49:36.208 defaults[17287:903] Could not parse: [My Value].
Try single-quoting it.
看起来字符 '[' 和 ']' 似乎会造成影响。如何使字符串 "[My Value]" 正常工作?
答案1
您可以尝试用单引号引起来,如下所示:
defaults write '/Users/test/Desktop/myPlist' 'My Key' "\"[My Value]\""
答案2
括号和引号都不是必需的,也不是 defaults write 命令的有效部分。以下是在 bash 脚本中有效的 defaults write 命令:
defaults write com.apple.Safari Homepage "http://google.com/"
下面是我在 OS X 上修改用户模板时使用的默认写入命令循环:
for USER_TEMPLATE in "/System/Library/User Template"/*
do
defaults write "${USER_TEMPLATE}"/Library/Preferences/com.apple.SetupAssistant DidSeeCloudSetup -bool TRUE
defaults write "${USER_TEMPLATE}"/Library/Preferences/com.apple.desktopservices DSDontWriteNetworkStores true
defaults write "${USER_TEMPLATE}"/Library/Preferences/.GlobalPreferences.plist AppleKeyboardUIMode -int 3
done
因此,正确格式的示例应如下所示:
defaults write /Users/test/Desktop/myplist MyKey MyValue
当然,如果您希望将键写为字符串以外的其他内容,则需要添加适当的开关 - 请参阅上面的布尔值和整数键的示例。
最后,检查默认命令的手册页 - 它可以很好地完成所有这些操作。
答案3
您可以通过将单引号括在双引号中来转义括号:
代替:defaults write '/Users/test/Desktop/myPlist' 'My Key' "[My Value]"
做:defaults write '/Users/test/Desktop/myPlist' 'My Key' "'[My Value]'"
注意添加到的单引号[My Value]