请解释一下如何正确使用unix shell功能。
例如,我们有以下函数f和g:
f()
{
#do something
return $code
}
g()
{
print $something
}
我们可以在下一个方式使用函数f:
f
if [[ $? -eq 0 ]]; then
#do 1
else
#do 2
fi
此功能执行一些工作并退出并退出状态 我们可以分析这种退出状态。
我们可以在下一个方式使用函数g:
g
或
result=$(g)
if [[ $result = "something" ]]; then
#do something
fi
在第一种情况下,我们刚刚调用了函数 在第二种情况下,我们使用命令替换将函数打印的所有文本分配给stdout到变量result。
但如果有以下功能怎么办:
z()
{
user=$1
type=$2
if [[ $type = "customer" ]]; then
result=$(/somedir/someapp -u $user)
if [[ $result = "" ]]; then
#something goes wrong
#I do not want to continue
#I want to stop whole script
exit 1
else
print $result
fi
else
print "worker"
fi
}
我可以在下一个方式使用函数z:
z
如果出现问题,则会停止整个脚本 但是如果有人在命令替换中使用此函数会怎么样:
result=$(z)
在这种情况下,如果someapp返回空字符串,则不会停止脚本 在函数中使用exit是不正确的方法?
答案 0 :(得分:1)
我现在没有办法测试这个,但是ksh(也许是bash),可以将变量范围内的函数。
z()
{
typeset result
user=$1
type=$2
if [[ $type = "customer" ]]; then
result=$(/somedir/someapp -u $user)
if [[ $result = "" ]]; then
#something goes wrong
#I do not want to continue
#I want to stop whole script
exit 1
else
print $result
fi
else
print "worker"
fi
}
请注意在顶部附近插入typeset result
。
您可能需要使用函数的备用声明才能使用此功能,即
function z {
#....
}
我希望这会有所帮助。
您也可以执行类似
的操作 result=$(z ; "eval retCode=\$? ; echo \$retCode" )