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

bash中执行sox的stat命令无法将输出结果存入变量问题求助

问题原因

  • sox的stat指令默认将统计结果输出到标准错误流(stderr,对应文件描述符2),而非标准输出流(stdout,对应文件描述符1)
  • 反引号、$()这类命令替换语法默认仅捕获标准输出流的内容,未被捕获的标准错误流内容会直接打印到终端,因此你赋值的变量始终为空。

解决方案

执行命令时将标准错误流重定向到标准输出流,即可正常捕获输出内容,修改后的代码如下:

INITSTAT=$(sox "$audioFilePath" -n stat 2>&1)
echo "$INITSTAT"

优化建议

  • 推荐用$()替代老式的反引号实现命令替换,嵌套使用时可读性更强,也不会和引号转义产生冲突
  • 引用变量时添加双引号,可以避免音频路径存在空格、特殊字符时的执行错误
  • 如果你只需要最后一行的统计数据,可以在命令后追加管道调用tail直接提取目标内容:
    INITSTAT=$(sox "$audioFilePath" -n stat 2>&1 | tail -n 1)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:39:02