我有一个变量在我的bash脚本的值是这样的:
~/a/b/c
注意,它是未展开的波浪号。当我对这个变量(称为$ VAR)ls -lt,我没有这样的目录。我想让bash解释/展开这个变量而不执行它。换句话说,我想要bash运行eval但不运行已评估的命令。这是可能在bash吗?
我如何设法将这个传递到我的脚本没有扩展?我通过双引号包围它的参数。
尝试这个命令看看我的意思:
ls -lt "~"
这正是我所处的情况。我想要扩大波浪号。换句话说,我应该用什么替换魔术,使这两个命令相同:
ls -lt ~/abc/def/ghi
和
ls -lt $(magic "~/abc/def/ghi")
注意〜/ abc / def / ghi可能存在也可能不存在。
由于StackOverflow的性质,我不能只是让这个答案不被接受,但在介入的5年,因为我发布了这里有比我承认的基本和很糟糕的答案更好的答案(我是年轻的,不要杀我)。
这个线程中的其他解决方案是更安全和更好的解决方案。优选地,我将与这两个:
> Charle’s Duffy’s solution
> Håkon Hægland’s solution
原始答案的历史目的(但请不要使用这个)
如果我没有错误,“〜”将不会被bash脚本以这种方式展开,因为它被当作一个字符串“〜”。你可以通过eval强制扩展。
#!/bin/bash homedir=~ eval homedir=$homedir echo $homedir # prints home path
或者,如果您想要用户的主目录,只需使用$ {HOME}。