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



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

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

在我的猜测中,使用此 env 变量时不会处理~

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

您能否指导我如何从环境变量~/project中获得真正的路径?

编辑

不好意思。该变量来自其他应用程序,因此我无法修改包含波浪号的环境变量。(使用波浪号扩展形式存储变量不是一种选择(。

编辑2

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

如果我能避免的话,我不会使用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( 并在主目录中搜索此用户。

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

  1. 您需要将"~"替换为项目目录的完整路径。
  2. 使用pwd命令标识项目目录的完整路径;例如/root/Documents/project是您获得的完整路径。
  3. export MY_WORK_PROJECT=/root/Documents/project执行此命令
  4. echo $MY_WORK_PROJECT执行此命令,以便获得此结果/root/Documents/project

最新更新