You need to enable JavaScript to run this app. Shell脚本中mkdir赋值失败与mktemp命令的用法差异问题
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本中mkdir赋值失败与mktemp命令的用法差异问题

问题原因

$() 语法的作用是捕获内部命令的标准输出(stdout),并将输出内容赋值给变量,两种命令的行为差异导致了写法效果不同:

  • mktemp -d 命令的设计逻辑是:成功创建临时目录后,会自动将新创建的目录的完整路径打印到标准输出,因此$(mktemp -d) 可以正确捕获路径赋值给变量
  • mkdir 命令的设计逻辑是:执行成功时没有任何标准输出,只有报错时才会将错误信息输出到标准错误(stderr,默认不会被$()捕获),因此WORKDIR=$(mkdir $SUBDIR/$BASENAME) 执行完后WORKDIR变量是空值,后续[[ -d $WORKDIR ]]判断自然会失败。

正确的简化写法

如果想把目录创建和变量赋值合并为一行,可以用如下写法,同时记得给变量加双引号避免路径含空格时报错:

WORKDIR="$SUBDIR/$BASENAME" && mkdir -p "$WORKDIR"

这里加-p参数还可以避免目录已经存在时报错中断脚本,你可以根据需求选择是否添加。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 08:15:05