gpt4 book ai didi

bash - 在波浪号之前扩展变量

转载 作者:行者123 更新时间:2023-11-29 09:27:04 25 4
gpt4 key购买 nike

我确定之前有人问过这个问题,但我找不到任何东西。我们在共享计算机上有难以理解的登录名,并希望使用 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

最佳答案

bash 扩展变量之前 的波浪号。参见 https://www.gnu.org/software/bash/manual/bash.html#Shell-Expansions

shell 将查看文字字符 $ o m a r 是登录名。因为它们不是,波浪号没有展开。 shell 最终将 $omar 视为变量并替换它。然后它将扩展后的单词 ~xyz123 传递给 echo 并打印它。

类似地,它将单词 ~xyz123 传递给 ls。由于 ls 不进行自己的波浪号扩展,它正在您当前目录中查找名为 ~xyz123 的文件,其中包含文字波浪号。由于这样的文件不存在,您会收到该错误。

如果你想要ls ~$var 列出文件,你需要eval ls ~$var。或者,由于 eval 被认为随便使用是非常不安全的,您可以改为这样做:

ls "$(getent passwd "$omar" | cut -d: -f6)"

关于bash - 在波浪号之前扩展变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53564733/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com