我有环境变量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
( 并在主目录中搜索此用户。
以下步骤可以提供解决方案:
- 您需要将"~"替换为项目目录的完整路径。
- 使用
pwd
命令标识项目目录的完整路径;例如/root/Documents/project
是您获得的完整路径。 export MY_WORK_PROJECT=/root/Documents/project
执行此命令echo $MY_WORK_PROJECT
执行此命令,以便获得此结果/root/Documents/project