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
相关产品推荐
相关产品推荐

