微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何手动扩展bash中的特殊变量(例如:〜tilde)

我有一个变量在我的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}。

原文地址:https://www.jb51.cc/bash/392320.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐