小编典典

如何在 bash 中手动扩展特殊变量(例如:〜波浪号)

all

我的 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 可能存在也可能不存在。


阅读 42

收藏
2022-08-20

共1个答案

小编典典

由于 StackOverflow 的性质,我不能仅仅让这个答案不被接受,但是在我发布这个答案之后的 5
年里,有比我公认的初级和非常糟糕的答案更好的答案(我还年轻,不要杀我)。

用于历史目的的原始答案(但请不要使用它)

如果我没记错的话,"~"bash 脚本不会以这种方式扩展它,因为它被视为文字字符串"~"eval您可以通过这样的方式强制扩展。

#!/bin/bash

homedir=~
eval homedir=$homedir
echo $homedir # prints home path

或者,${HOME}如果您想要用户的主目录,只需使用。

2022-08-20