#!/bin/sh
hi()
{
echo $1
exit 0
}
for file in `ls`
do
hi $file
done
我上边这个程序直接退出这个脚本程序
而另外一个程序仅仅退出了函数,整个脚本还在执行
试问,exit 有这样在不同情况下存在一些区别的情况吗?
6 个解决方案
#1
真的有区别啊
我下边的这个程序就是仅仅退出函数,而非整个shell脚本,
下边这个函数是通过标准输入获取文件名的
#!/bin/sh
hi()
{
read filename
echo $filename
if [[ -f $filename ]]
then
echo valid file.
exit 1
else
echo invalid file.
fi
}
for file in `ls`
do
echo $file | hi
done
是不是存在标准输入的函数,遇上exit时就仅仅退出函数? 有这样的规定吗?
#2
LZ可以查下man手册,exit通常退出脚本,函数的退出最好用return
你上面的例子为什么没有退出,是因为用了管道,之后的exit并没有退出父进程,所以脚本能一直运行
我给个例子你就明白了
#!/bin/bash
hi()
{
filename=$1
echo $filename
if [[ -f $filename ]]
then
echo valid file.
exit 1
else
echo invalid file.
fi
}
for file in `ls`
do
hi $file
done
测试后,然后用return替换这个exit,再试试?看看有哪些不同
#3
for file in `ls`
do
echo $file | hi
done
你用了管道,其实你执行hi的进程还是退出了。
#4
楼上二位的意思是说,exit是用来退出进程的,
当用管道对一个函数操作的时候,函数是以进程的形式运行的,否则,函数就是个函数!!!
?
#5
当在脚本中使用管道,你退出的时候只是退出管道,但并没exit整个函数
你看上面我的例子,先测试下,然后用return换exit再试,就知道了
#6
引用 5 楼 joan8363 的回复:
当在脚本中使用管道,你退出的时候只是退出管道,但并没exit整个函数
你看上面我的例子,先测试下,然后用return换exit再试,就知道了
写错了,是你退出的时候只是退出管道,但并没exit整个脚本