Bash 分配 bool 函数的变量结果,然后检查

Byr*_*eld 4 bash shell-script

我正在尝试创建一个返回 0 或 1(即 true 或 false)并接受一个参数的函数,然后在另一个中创建一个变量来存储该函数的结果。最后检查该变量是 0 还是 1(真或假)

这是我正在尝试的示例

#!/bin/bash

_has_string() {
  if [ $1 == "string" ];
    return 0
  else
    return 1
  fi
}

_my_func() {
  var=$(_has_string "string")
  if [ $var == "0" ]; then
    echo "var contains string"
  else
    echo "var does not contain string"
  fi
}

_my_func
Run Code Online (Sandbox Code Playgroud)

我已经尝试了一些变体,但似乎找不到让它工作的方法。我所有的变体基本上都只是返回$var为空。不是 0。不为空。从字面上看,它只是空白。

Hau*_*ing 13

您将输出与退出代码混淆。

_my_func() {
  if _has_string 'string'; then
Run Code Online (Sandbox Code Playgroud)

您还应该引用您的变量;并且_has_string可以简化:

_has_string() {
    [ "$1" = 'string' ]
}
Run Code Online (Sandbox Code Playgroud)


小智 6

$(...)返回命令的输出:发送到标准输出的东西。您需要退出代码。在 bash 脚本中退出进程(或在您的情况下为函数)后,特殊变量$?将设置为退出代码。

所以而不是

var=$(_has_string 'string')
...
Run Code Online (Sandbox Code Playgroud)

考虑

_has_string 'string'
var=$?
...
Run Code Online (Sandbox Code Playgroud)

  • 甚至`if _has_string 'string'; 然后……` (2认同)