外壳 - 变量分配输出失败,音量 = "$(sox $1 -n stat -v)" ?



我想用SoX批处理一堆wav文件(调整它们的音量(。我在分配sox file.wav -n stat -vVolume Adjustment输出时遇到问题。我试过这个:

我发现网络上有很多关于此操作的示例,但这些示例并不像data=$(data)那么复杂。我尝试了VOLUME_ADJUST="$(sox $1 -n stat -v)"但输出到我的终端的结果未分配给变量。当我回应它时,什么都没有出现。

感谢您的建议。我的代码如下:

#!/bin/sh
RED='33[0;31m'
NC='33[0m'
BLUE='33[0;34m'
GREEN='33[0;32m'
Process () {
    printf "Process with ${RED}$1${NC}n";
    printf "Volume up as high as possible?[y/n]";
    read PASS;
    if test "$PASS" = "y"; then
        a="$(date)"
        VOLUME="$(sox "$1" -n stat -v)"
        #echo $VOLUME
        # eval "sox -v $VOLUME_ADJUST $1 $1"
        #printf $?
    elif test "$PASS" = "n"; then
        printf "${GREEN}Volume up skipped.${NC}"
    fi
}
Process "test.wav"

这是我所有代码的粘贴

这是我

的理解。

出于某种原因,sox 在标准中打印数据,但不在标准输出中打印数据。当我们从像 var=$(date) 这样的命令中获取值时,来自 stdout 的消息被分配给变量,但来自 stderr 的消息不会被分配给变量。为了获得该值,很容易将stderr重定向到stdout:只需在命令后添加2>&1即可。此外,我们可以将 stdout 定向到 stderr,就像打印var=$(date 1>&2)结果一样,如果我们回显它,$var什么都没有。