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

bash脚本中用变量调用tar命令解压tgz文件失败如何解决?

问题根因

你的脚本存在两处核心语法错误,导致tar命令实际未读取到正确的文件名参数:

  • Shell变量赋值时=两侧不允许有空格,你写的pini= $(find ...)会被Shell解析为「临时将pini变量设为空值,执行后面的find命令」,find的结果直接输出到终端,并未赋值给pini变量。你报错中打印的文件名其实是find命令的直接输出,而非echo $pini的输出,此时pini变量实际为空。
  • Shebang行末尾多了多余的.字符,会导致Shell解析器识别异常。
  • (可选优化)变量调用时未加双引号,若文件名包含空格等特殊字符会导致参数解析错误。

解决方法

按照以下规则修改脚本即可:

  1. 修正Shebang行,删除末尾的多余.
  2. 移除变量赋值时=两侧的空格
  3. 调用$pini变量时包裹双引号,避免特殊字符影响

修正后的完整脚本

#!/bin/sh
pini=$(find . -name 'pini-chart-2*' -printf '%f\n')
echo "$pini"
tar -xvf "$pini"

额外优化建议

如果存在匹配到多个tgz文件的场景,可以加判断逻辑避免报错:

#!/bin/sh
pini=$(find . -name 'pini-chart-2*' -printf '%f\n')
if [ $(echo "$pini" | wc -l) -ne 1 ]; then
  echo "匹配到的文件数量异常,请检查"
  exit 1
fi
echo "$pini"
tar -xvf "$pini"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:45:01