我正在运行一个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
如何调用函数来回显到标准输出?
命令替换捕获所包含命令的标准输出并将其作为字符串返回。对输出使用不同的文件描述符。
#!/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 "$@"
只需在主函数中直接调用该函数即可,无需将其存储在变量中。 另外,如果您回显
$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
}