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

时间:2017-02-08 07:19:33

标签: sh sox

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

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

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

#!/bin/sh

RED='\033[0;31m'
NC='\033[0m'
BLUE='\033[0;34m'
GREEN='\033[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"

Here is a pastebin to all of my code

1 个答案:

答案 0 :(得分:0)

这是我的理解。

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