为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕的地6264312 2019-07-06 16:34:38
如何在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可能存在也可能不存在。
查看完整描述

3 回答

?
桃花长相依

TA贡献1860条经验 获得超8个赞

由于StackOverflow的本质,我不能仅仅让这个答案不被接受,但是在我发布这篇文章之后的5年里,有比我公认的最基本和非常糟糕的答案好得多的答案(我当时还年轻,不要杀了我)。

这个线程中的其他解决方案是更安全和更好的解决方案。我最好选择这两种方法中的任何一种:


原来的答案是出于历史目的(但请不要使用这个)

如果我没弄错"~"不会被bash脚本以这种方式展开,因为它被视为一个文字字符串。"~"..你可以通过eval像这样。

#!/bin/bashhomedir=~eval homedir=$homedir
echo $homedir # prints home path

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


查看完整回答
反对 回复 2019-07-06
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

如果变量var是用户输入的,eval用于扩展倾斜体

eval var=$var  # Do not use this!

原因是:例如,用户可以偶然(或按目的)类型。var="$(rm -rf $HOME/)"可能带来灾难性的后果。

一种更好(更安全)的方法是使用Bash参数展开:

var="${var/#\~/$HOME}"


查看完整回答
反对 回复 2019-07-06
  • 3 回答
  • 0 关注
  • 651 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信