我在我的脚本中编写了一个在控制台上打印消息的函数。可以从任何其他函数调用它。
function print_message
{
echo "message content"
}
问题是,在 shell 中,函数如下echo
or printf
通常在标准输出上打印数据将其消息重定向到调用函数,而不是作为返回值。
return_value=$(print_message) # this line print nothing.
echo $return_value # This line print the message. I don't want to have to do it.
我想避免这种行为并将其直接打印在标准或错误输出上。有办法做到吗?
或者我想在 shell 中使用函数是错误的,我应该使用一个巨大的脚本来处理任何行为吗?
The $(...)
调用语法捕获标准输出。这就是它的工作。这就是它的作用。
如果您想要不被捕获的静态消息,那么您可以使用标准错误(但请不要对不是错误消息或调试消息等的内容执行此操作)。
你不能有一个输出到标准输出的函数,但它不会被$(...)
它运行在上下文中,因为只有一个标准输出流。你能做的最好的事情就是检测你何时有控制终端/等等。并直接写信给它(但我建议大多数时候也不要这样做)。
要完全重定向到函数的标准错误,您可以执行以下任一操作。
print_message() {
echo "message content" >&2
}
or
print_message() {
echo "message content"
} >&2
当只有一行输出时,差异并不重要,但如果有多行输出,则后者可能会稍微优化一些(特别是当输出流恰好是一个文件时)。
还要避免function
关键字,因为它不是 POSIX/spec 并且不具有广泛的可移植性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)