You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将mkdir创建的目录路径赋值给Shell脚本变量?

获取mkdir创建目录的准确路径并存储到变量

问题根源

mkdir -p 默认不会输出创建的目录路径,所以直接用 a=$(mkdir -p -- "$path") 得到的是空变量,这是正常现象。

解决方案

方法1:用realpath/readlink转绝对路径

如果你的系统支持 realpath(大部分现代Linux发行版都有),可以在创建目录后获取其绝对路径:

mkdir -p -- "$path"
a=$(realpath -- "$path")

如果没有realpath,可以用readlink -f(GNU coreutils自带):

mkdir -p -- "$path"
a=$(readlink -f -- "$path")

这两种方式都能把相对路径、带符号链接的路径转换成标准的绝对路径,适合后续权限设置等操作。

方法2:利用GNU mkdir的-v选项输出路径

GNU版本的mkdir支持-v(verbose)选项,执行时会打印创建的目录信息,我们可以提取其中的路径:

a=$(mkdir -pv -- "$path" | awk '{print $NF}')

mkdir -pv会输出类似mkdir: created directory '/home/rakesh/foo.com'的内容,awk '{print $NF}'会取该行最后一个字段,也就是我们需要的路径。

方法3:用cd+pwd获取绝对路径

这是兼容性最好的方法,几乎所有类Unix系统都支持:

mkdir -p -- "$path"
a=$(cd "$path" && pwd)

原理是先进入目标目录,再用pwd输出当前绝对路径,即使原$path是相对路径,也能得到正确的绝对路径。

注意事项

  • 所有涉及$path的地方都要用双引号包裹,避免路径包含空格、特殊字符时出现错误。
  • 如果$path是已经存在的目录,上述方法依然有效,会返回该目录的绝对路径。

内容的提问来源于stack exchange,提问作者Rakesh Vijayan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 03:45:40