我的 bash 脚本中有一个变量,其值如下所示:
~/a/b/c
请注意,它是未扩展的波浪号。当我对这个变量执行 ls -lt(称为 $VAR)时,我没有得到这样的目录。我想让 bash 解释/扩展这个变量而不执行它。换句话说,我希望 bash 运行 eval 但不运行评估的命令。这在bash中可能吗?
我是如何设法在不扩展的情况下将其传递到我的脚本中的?我通过用双引号括起来的参数。
试试这个命令看看我的意思:
ls -lt "~"
这正是我所处的情况。我希望扩大波浪号。换句话说,我应该用什么替换魔法以使这两个命令相同:
ls -lt ~/abc/def/ghi
和
ls -lt $(magic "~/abc/def/ghi")
请注意,~/abc/def/ghi 可能存在也可能不存在。
由于 StackOverflow 的性质,我不能仅仅让这个答案不被接受,但是在我发布这个答案之后的 5 年里,有比我公认的初级和非常糟糕的答案更好的答案(我还年轻,不要杀我)。
用于历史目的的原始答案(但请不要使用它)
如果我没记错的话,"~"bash 脚本不会以这种方式扩展它,因为它被视为文字字符串"~"。eval您可以通过这样的方式强制扩展。
"~"
eval
#!/bin/bash homedir=~ eval homedir=$homedir echo $homedir # prints home path
或者,${HOME}如果您想要用户的主目录,只需使用。
${HOME}