猿问

如何在bash中手动展开特殊变量(ex:~tilde)

如何在bash中手动展开特殊变量(ex:~tilde)

我的bash脚本中有一个变量,其值如下所示:

~/a/b/c

注意,它是未展开的倾斜体。当我对这个变量(称为$VAR)做ls-lt时,我就没有这样的目录。我想让bash解释/展开这个变量而不执行它。换句话说,我希望bash运行val,但不运行计算过的命令。这在巴什有可能吗?

我是如何在没有扩展的情况下将它传递到我的脚本中的?我用双引号围绕它传递了论点。

尝试使用这个命令来理解我的意思:

ls -lt "~"

这正是我所处的情况。我要扩大倾斜度。换句话说,我应该用什么代替魔术使这两个命令完全相同:

ls -lt ~/abc/def/ghi

ls -lt $(magic "~/abc/def/ghi")

请注意,~/abc/def/ghi可能存在也可能不存在。


慕的地6264312
浏览 652回答 3
3回答

桃花长相依

由于StackOverflow的本质,我不能仅仅让这个答案不被接受,但是在我发布这篇文章之后的5年里,有比我公认的最基本和非常糟糕的答案好得多的答案(我当时还年轻,不要杀了我)。这个线程中的其他解决方案是更安全和更好的解决方案。我最好选择这两种方法中的任何一种:查尔达菲解H腺解原来的答案是出于历史目的(但请不要使用这个)如果我没弄错"~"不会被bash脚本以这种方式展开,因为它被视为一个文字字符串。"~"..你可以通过eval像这样。#!/bin/bashhomedir=~eval homedir=$homedir echo $homedir # prints home path或者,只需使用${HOME}如果您想要用户的主目录。

素胚勾勒不出你

如果变量var是用户输入的,eval应不用于扩展倾斜体eval var=$var  # Do not use this!原因是:例如,用户可以偶然(或按目的)类型。var="$(rm -rf $HOME/)"可能带来灾难性的后果。一种更好(更安全)的方法是使用Bash参数展开:var="${var/#\~/$HOME}"
随时随地看视频慕课网APP

相关分类

Python
我要回答