我正在尝试创建一个返回 0 或 1(即 true 或 false)并接受参数的函数,然后在另一个函数中创建一个变量来存储该函数的结果。最后检查该变量是 0 还是 1(true 或 false)
这是我正在尝试的示例
#!/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
我已经尝试了一些变体,但似乎无法找到让它发挥作用的方法。我的所有变体基本上只是返回什么$var
都没有。不是 0。不是空。从字面上看,它只是空白。
答案1
您将输出与退出代码混淆了。
_my_func() {
if _has_string 'string'; then
您还应该引用您的变量;并且_has_string
可以简化为:
_has_string() {
[ "$1" = 'string' ]
}
答案2
$(...)
返回输出命令的内容:发送到标准输出的内容。你想要的退出代码。 bash 脚本中的进程(或者在您的情况下是函数)退出后,特殊变量$?
将设置为退出代码。
所以而不是
var=$(_has_string 'string')
...
考虑
_has_string 'string'
var=$?
...
答案3
正如其他人已经指出的那样,您只需要在if
语句中使用该函数即可。这里有一些你可能不知道的事情:
函数可以被视为一种形式复合命令。根据 bash 手册,[[
它是可用于构建复合命令的运算符之一。因此,您的函数_has_string()
可以这样实现:
$ _has_string()[[ "$1" = "string" ]]
$ if _has_string "string"; then echo "YES"; fi
YES
当然,由于运营商的原因,这绝不是可移植的[[
。但我们可以利用( )
or {}
。例如,这是如何工作的/bin/dash
:
$ _has_string()( [ "$1" = "string" ]; )
$ if _has_string "string"; then echo "YES"; fi
YES
$ if _has_string "nope" ; then echo "YES"; fi
$