![Bash:从牙套中返回](https://linux22.com/image/202913/Bash%EF%BC%9A%E4%BB%8E%E7%89%99%E5%A5%97%E4%B8%AD%E8%BF%94%E5%9B%9E.png)
user@sv7280:~$ return
bash: return: can only `return' from a function or sourced script
user@sv7280:~$ { return }
>
这是怎么回事,>
这里的提示是什么意思,它会把{ return }
我带到哪里?
答案1
>
是$PS2
shell 发出的提示,告诉您命令尚未完成,需要您输入更多输入才能完成。
在 bash 中,如果你这样做:
echo }
你会看到它输出}
.
{
是启动命令组的关键字。
{ echo }
是上面的{
our 后面的关键字echo }
,shell 正在等待结束}
关键字,然后才能开始运行它。
该}
关键字必须与前一个命令分开,用;
、 换行符(或&
,甚至诸如{(echo)}
...)。
无论是内置echo
的return
还是来自句法的角度来看,这没有什么区别。所以你需要:
{ return; }
但是,这return
不是从函数内部调用的,因此您仍然会收到该错误。
要定义函数,在类似 Bourne 的 shell 中,您仍然funcname()
在命令前面。的情况下bash
,该命令只能是复合命令,如(subshell)
, { command group; }
, for ...; do ...; done
....
所以,你需要:
myfunc() { return; echo not reached; }; myfunc
或者:
myfunc() for i in 1 2; do echo "$i"; return; done; myfunc
除了函数之外,return
还可以从源脚本中调用,因此如果您希望能够从一组命令返回而无需定义函数,您可以这样做:
source /dev/fd/3 3<< 'EOF'
echo foo
return 123
echo not reached
EOF
或者您可以使用子 shell 并exit
代替return
:
(
echo foo
exit 123
echo not reached
)
(当然,这些命令在子 shell 环境中运行)
在 中zsh
,您还可以使用匿名函数:
() {
echo foo
return 123
echo not reached
}