【发布时间】:2019-05-03 00:49:06
【问题描述】:
我确定以前有人问过这个问题,但我找不到任何东西。我们在共享机器上有难以理解的登录名,并希望使用 shell 变量来替换难以记住的登录名来代替人们的真实姓名。
例如,假设 Omar 的登录名是 xyz123。我可以这样做:
$ omar=xyz123
$ echo ~$omar
输出看起来不错:
~xyz123
但是如果我输入这个:
$ ls ~$omar
有一个错误:
ls: cannot access ~xyz123: No such file or directory
我认为这是因为波浪号扩展发生在变量扩展之前,但无法弄清楚如何解决这个问题。
也许这个答案是相关的,虽然我不确定: How to manually expand a special variable (ex: ~ tilde) in bash
【问题讨论】:
-
输出看起来“很好”
~xyz123,但它不是xyz123主目录的路径。 -
所有可能的变通方法都不是很有吸引力。嘀咕诸如
eval之类的滥用术语不会让我受到安全人员的喜爱——这并不能怪他们。 -
退后一步方式,我想说很少需要别人其他人的主目录,其他人不一定可以访问反正。脚本将由
omar运行,在这种情况下您只需使用~,或者脚本将以root 身份运行,他可以根据需要使用su变为omar。 -
您可能想改用
cdable_vars选项;添加像omarhome=/home/omar这样的变量(手动查找一次并将值存储在变量中),然后cd omarhome将等效于cd "$omarhome"。 (当然,其他命令必须更明确地使用该变量,例如ls "$omarhome"。)
标签: bash shell variable-expansion tilde-expansion