Bash 返回语句中出现非法数字错误

use*_*135 2 syntax bash shell function

我正在尝试调用 bash 函数并将函数返回的输出分配给变量。但是,当我运行下面的代码时,出现以下错误,并且我不明白我可能做错了什么:

test.sh: return: line 7: Illegal number: aGVsbG93b3JsZA== helloworld

convertfrombase64 () {
  B64DATA=$1
  echo "$B64DATA" | base64 -d
  return "$B64DATA"
}

PLAINTEXT=$(convertfrombase64 "aGVsbG93b3JsZA==")
echo "$PLAINTEXT"
Run Code Online (Sandbox Code Playgroud)

cod*_*ter 5

您不能从函数返回字符串。Bash 函数的返回值遵循与退出代码相同的规则 - 请参阅相关帖子。

您已经正确使用了该函数的输出。可能您想返回退出代码base64来指示状态,如下所示:

convertfrombase64 () {
  B64DATA=$1
  echo "$B64DATA" | base64 -d
  return $?
}
Run Code Online (Sandbox Code Playgroud)

根据评论中得到的很好的建议,上面的函数可以更好地写成:

convertfrombase64() {
  printf '%s' "$1" | base64 -d
}
Run Code Online (Sandbox Code Playgroud)

请参阅这篇文章了解更多详细信息:

  • +1。请注意,“return $?”实际上是多余的,因为默认行为是返回最后一个命令的退出状态。事实上,该函数可以写成 `convertfrombase64 () { base64 -d <<< "$1" ; }`,这也避免了触及全局 `B64DATA` 变量,避免了 `echo` 的任何重要行为,避免了一些不必要的子 shell 等。 (2认同)