【问题标题】:How to store return value from function with argument in a variable? [duplicate]如何将带有参数的函数的返回值存储在变量中? [复制]
【发布时间】:2020-01-29 00:39:10
【问题描述】:

我正在努力将函数的返回值(0 或 1)存储在变量中。无论我尝试什么, $var 最终都是空的,或者我遇到错误消息。 这是我的具体代码:

function screen_exists() {
        if screen -list | grep -q "${1}"; then
          return 0
        else
          return 1
        fi
    }

VAR=$(screen_exists "${PLAYER_SCREEN_NAME}")
echo ${VAR}

我也尝试过一个超级简单的函数,它总是返回 0,但结果相同。

【问题讨论】:

  • @Cyrus 这是我的复制和粘贴错误。抱歉,已解决!
  • 你的函数可以是screen_exists () { screen -list | grep -q "$1"; }。如果grep 找到匹配项,该函数的返回码将为0(成功)。您应该遵循这个约定,而不是返回 1 表示成功和 0 表示失败。它将允许您使用 if screen_exists "name" 之类的功能。

标签: bash shell command-line terminal


【解决方案1】:

$(...) 是命令替换语法,用于捕获给定命令的输出。如果要存储函数的返回值,请使用$?:

screen_exists() {
    screen -list | grep -q "$1"
    # implicit here is: return $?
}

screen_exists "${PLAYER_SCREEN_NAME}"
ret=$?

另请注意,如果grep 没有找到搜索模式,此函数将返回1,如果成功则返回0,这是shell 实用程序中的标准规范。

【讨论】:

  • 非常感谢,我不知道$? 是一个东西。我所有的谷歌搜索都建议像ret=$(function) 这样的东西,我试图根据我的需要进行调整。
  • 感谢@TomFenech,两个有效点。我已将它们添加到我的答案中。
猜你喜欢
  • 2020-05-05
  • 1970-01-01
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 2017-06-19
相关资源
最近更新 更多