Bash - 在环境变量中解析 ~ 时出错

Bash - Error parsing ~ in environment variable

我有环境变量export MY_WORK_DIR="~/project"。 当我使用下面的命令时,它给我一个错误:

realpath $MY_WORK_DIR

realpath: '~/project': No such file or directory

据我猜测,使用此环境变量时未处理 ~

顺便说一句,export MY_WORK_DIR=~/project 不是我的选择。 ~ 应该在字符串中。

能否指导我如何从环境变量中获取真实路径 ~/project

编辑

对不起。该变量来自其他应用程序,因此我无法修改包含波浪号的环境变量。 (不能选择使用波浪线扩展形式存储变量)。

编辑2

这样使用 eval 命令安全吗? eval "echo ${MY_WORK_DIR}"。它适合我使用。

以下步骤可以提供解决方案:

  1. 您需要将“~”替换为项目目录的完整路径。
  2. 使用pwd命令识别项目目录的完整路径;例如/root/Documents/project 是你得到的完整路径。
  3. 执行这条命令export MY_WORK_PROJECT=/root/Documents/project
  4. 执行这个命令echo $MY_WORK_PROJECT所以你应该得到这个结果 /root/Documents/project

如果可以避免,我不会使用eval。特别是在您这样做的方式中,这是通过将危险代码嵌入 MY_WORK_DIR.

来造成破坏的邀请

针对您的具体示例,一个廉价的解决方案是执行

if [[ ${MY_WORK_DIR:0:1} == '~' ]]
then 
  MY_WORK_DIR="$HOME/${MY_WORK_DIR:1}"
fi

砍掉烦人的 ~ 并添加到您的主目录前面。但是,如果 MY_WORK_DIR 设置为 ~einstein/project.

,这将失败

在这种情况下,您必须提取用户名 (einstein) 并搜索该用户的主目录。