Linux环境变量配置:基于现有变量向上一级目录设置新变量
正确配置temp2环境变量的方法
嘿,我懂你遇到的问题了——你本来想基于已有的temp变量(指向/usr/local/sbin)向上跳一级目录,再指向bin,但用export temp2=$temp:/../bin只是做了字符串拼接,shell并不会自动解析这个路径里的../,所以得到了奇怪的结果。
下面给你几个靠谱的解决办法:
方法1:用dirname命令(通用直观)
dirname命令的作用就是提取路径中的父目录部分,我们可以用它来获取$temp的上一级路径,再拼接/bin:
export temp2=$(dirname "$temp")/bin
这里给$temp加引号是个好习惯,万一你的路径里包含空格或者特殊字符,也能正常处理。执行这个命令后,temp2就会被设置为/usr/local/bin。
方法2:用Shell参数扩展(更高效,无需外部命令)
如果你想避免调用外部命令,用Shell内置的参数扩展更高效,有两种写法:
写法A:精准匹配末尾的sbin
如果你确定$temp的末尾一定是/sbin,可以用%操作符去掉末尾的指定字符串:
export temp2=${temp%/sbin}/bin
${temp%/sbin}会把/usr/local/sbin末尾的/sbin去掉,得到/usr/local,再加上/bin就是目标路径。
写法B:通用获取父目录
如果想更通用,不管$temp指向的是哪个子目录,都能拿到它的父目录,就用%/*操作符(去掉最后一个/之后的所有内容):
export temp2=${temp%/*}/bin
这个写法更灵活,比如如果temp以后变成/usr/local/lib,用这个命令也能得到/usr/local/bin,适应性更强。
你可以随便选一种试试,都能达到你想要的效果~
内容的提问来源于stack exchange,提问作者Surya Tej




