【发布时间】:2017-02-22 12:31:14
【问题描述】:
在 bash 脚本中,我想使用存储在默认系统中的值。要检索该值,我会这样做:
defaults read my.domain my_key
#returns "~/Dropbox (My Company)/"
当我在 bash 脚本中执行以下操作时,波浪号 (~) 不会扩展(由于简洁,我删除了错误处理):
my_key=$(defaults read my.domain my_key)
echo $my_key
#output: "~/Dropbox (My Company)/"
基本上,问题是这样证明的:
my_key='~/Dropbox (My Company)/'
echo $my_key
波浪号没有展开,因为文件名在引号之间(不确定它是否完全像这样工作)。当我想强制波浪号扩展时,它抱怨括号(-bash: syntax error near unexpected token '('):
eval my_key='~/Dropbox (My Company)/'
现在,我只是将完整路径保存到默认系统中(默认写入 my.domain my_key -string "/Users/xxx/Dropbox (My Company)"),所以我不需要扩展。但我认为它应该与扩展、空格和括号一起使用。
我正在寻找一个明智的解决方案。
【问题讨论】:
-
/Users/xxx/是否对应于该用户的$HOME值? -
~是如何获得该值的?一开始就不应该使用它。它是路径名的特定于 shell 的快捷方式,不应用于存储路径名。 -
@Inian:是的,是的。我只是不想把我的用户名放在 stackoverflow 上。
-
@chepner:为什么我不能将
~存储在路径名中?如果我的管理员决定重新定位用户文件夹,我不想更新我的设置... -
shell 以外的其他程序使用默认系统,不一定知道波浪号是什么意思。
~/Dropbox (My Company)/本身就不是一个有效的路径名。