Unix shell 函数、命令替换和退出
请解释一下如何正确使用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
在第一种情况下我们只是调用函数。
在第二种情况下,我们使用命令替换将函数打印到标准输出的所有文本分配给变量结果。
但是如果有以下函数怎么办:
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 不是正确的方法吗?
Please explain me about how to use unix shell function correctly.
For example we have following functions f and g:
f()
{
#do something
return $code
}
g()
{
print $something
}
We can use function f in the next way:
f
if [[ $? -eq 0 ]]; then
#do 1
else
#do 2
fi
This function performs some work and exits with some exit status.
And we can analyze this exit status.
We can use function g in the next way:
g
or
result=$(g)
if [[ $result = "something" ]]; then
#do something
fi
In first case we just called function.
In the second case we used command substitution to assign all text that function prints to stdout to variable result.
But what if there is following function:
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
}
I can use function z in the next way:
z
If something goes wrong then whole script will be stopped.
But what if somebody uses this function in command substitution:
result=$(z)
In this case if someapp returns empty string script will not be stopped.
Is it not correct approach to use exit in functions?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我现在没有办法测试这个,但是 ksh (也许 bash 也是)可以在函数内定义变量的范围。
请注意在顶部附近插入的
排版结果
。您可能需要使用函数的替代声明才能使此功能正常工作,即
我希望这会有所帮助。
你也可以做类似的事情
I don't have a way to test this right now, but ksh (maybe bash too), can scope variables inside functions.
Notice the insertion of
typeset result
near the top.You may need to use the alternate declartion of function for this feature to work, i.e.
I hope this helps.
You could also do something like