使用“echo”时,调用函数会停止将任何内容打印到标准输出

问题描述 投票:0回答:2

我正在运行一个bash脚本,奇怪的是,在一行调用函数之后,被调用函数中的

echo
没有打印任何内容。

$ cat test.sh
#!/bin/bash
foo() {
    echo 1 # not print in stdout
    echo "I want to return this string"
}

main() {
    echo 0 # print in stdout
    count="$(foo)"
}

main "$@"

$ ./test.sh
0

如何调用函数来回显到标准输出?

bash
2个回答
0
投票

命令替换捕获所包含命令的标准输出并将其作为字符串返回。对输出使用不同的文件描述符。

#!/bin/bash

exec 3>&1

foo() {
    echo 1 >&3  # Will go to stdout, but won't get captured.
    echo "I want to return this string"
}

main() {
    echo 0 # print in stdout
    count="$(foo)"
    echo "C: $count"
}

main "$@"

0
投票

只需在主函数中直接调用该函数即可,无需将其存储在变量中。 另外,如果您回显

$count
变量,它将显示结果

main() {
    echo 0
    foo
}

或者执行如下操作,它将允许

foo
中的 echo 语句打印到标准输出。

main() {
    echo 0
    
    # do either like this
    echo -e "$(foo)"

    # or like this
    foo

    # or like this
    count="$(foo)"
    echo $count
}
© www.soinside.com 2019 - 2024. All rights reserved.