gpt4 book ai didi

bash - 如何手动扩展特殊变量(例如 : ~ tilde) in bash

转载 作者:太空狗 更新时间:2023-10-29 12:40:40 25 4
gpt4 key购买 nike

我的 bash 脚本中有一个变量,它的值是这样的:

~/a/b/c

请注意,它是未展开的代字号。当我对这个变量(称之为 $VAR)执行 ls -lt 时,我没有得到这样的目录。我想让 bash 解释/扩展这个变量而不执行它。换句话说,我希望 bash 运行 eval 但不运行评估的命令。这在 bash 中可能吗?

我是如何在不扩展的情况下将其传递到我的脚本中的?我用双引号将参数括起来。

试试这个命令看看我的意思:

ls -lt "~"

这正是我所处的情况。我希望扩展波浪号。换句话说,我应该用什么来替换 magic 以使这两个命令相同:

ls -lt ~/abc/def/ghi

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

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

最佳答案

如果变量 var 由用户输入,eval 应该用于扩展代字号 using

eval var=$var  # Do not use this!

原因是:用户可能会意外(或有意)输入例如 var="$(rm -rf $HOME/)" 并可能造成灾难性后果。

更好(也更安全)的方法是使用 Bash 参数扩展:

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

关于bash - 如何手动扩展特殊变量(例如 : ~ tilde) in bash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45418733/

25 4 0
文章推荐: android - 从音频文件 Uri 获取专辑封面
文章推荐: javascript - Canvas requestAnimationFrame暂停
文章推荐: android - Nexus 5 和 Android L 上的 Material 设计
文章推荐: html - 如何在 Embed 上获得 height=100%