清除回声历史

Clearing the echo history

我有一个 bash 脚本调用一个 return 值的函数。我包含了以下脚本:

脚本

source ./utilities/function1.sh
result=$(Function1)
echo "Result: $result"

函数 1

function Function1 {
    echo "Inside Function: Function1"

cat <<EOF
this is the result
EOF
}

我希望能够在函数内回显到控制台,并且 return 只回显我想要的值,不包括回显到控制台的消息,但是当我 运行脚本如下 returned:

Result: Inside Function: Func1
this is the result

这是从 bash 函数中 return 一个值的最佳方法吗?或者有什么方法可以回显到控制台并 return 一个没有内容的值从函数回显命令?

提前致谢

有几种方法可以满足您的需求。两个简单的是:

使用 STDERR 回显到控制台并在脚本中捕获 STDOUT。默认情况下,STDOUT 在文件描述符 1 上,STDERR 在文件描述符 2 上:

function myFunction() {
  echo "This goes to STDOUT" >&1  # '>&1' is the default, so can be left out.
  echo "This goes to STDERR" >&2
}

result=$(myFunction)
echo ${result}

使用一个变量来return一个字符串给调用者:

function myFunction() {
  echo "This goes to STDOUT"
  result="This goes into the variable"
}

declare    result="" # Has global scope. Can be modified from anywhere.
myFunction
echo ${result}

全局范围变量不是好的编程习惯,但却是 bash 脚本编写中必不可少的罪恶。