例子:
#!/bin/sh
a() {
R=f
ls -1 a*
[ "$?" == "1" ] && { R=t; }
echo $R
}
r=`a`
echo $r
$r
包含 t
或 f
以及 ls
命令的输出。
我可能会写ls -1 a* >/dev/null 2>/dev/null
,但是如果有更复杂的脚本可能会导致错误。
有什么方法可以从 a()
返回单个值吗?
最佳答案
shell 函数可以返回一个数值。考虑 0 和 1 而不是 'f' 和 't'
#!/bin/sh
a() {
R=0
ls -1 a*
[ "$?" == "1" ] && { R=1; }
return $R
}
a
r=$?
echo $r
这仍然会写入 ls -1 a*
的输出,您可能仍想处理它,但是 r
的值将是 0 或 1,并且不会包含输出。
从一行或整个 block 重定向输出的其他示例很好,并且正如其他人所建议的那样,您应该了解其他测试条件的方法(但我假设 ls
是一个任意的例子)
关于shell - 从 shell 脚本函数返回单个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3139786/