阅读背景:

shell 函数中的用exit时,什么情况下仅仅退出函数,什么情况下退出整个shell程序?

来源:互联网 

#!/bin/sh

hi()
{
  echo 

#!/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整个脚本


  exit 0
}

for file in `ls` for fi



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: