Bash:从牙套中返回

Bash:从牙套中返回
user@sv7280:~$ return
bash: return: can only `return' from a function or sourced script
user@sv7280:~$ { return }
> 

这是怎么回事,>这里的提示是什么意思,它会把{ return }我带到哪里?

答案1

>$PS2shell 发出的提示,告诉您命令尚未完成,需要您输入更多输入才能完成。

在 bash 中,如果你这样做:

echo }

你会看到它输出}.

{是启动命令组的关键字。

{ echo }

是上面的{our 后面的关键字echo },shell 正在等待结束}关键字,然后才能开始运行它。

}关键字必须与前一个命令分开,用;、 换行符(或&,甚至诸如{(echo)}...)。

无论是内置echoreturn还是来自句法的角度来看,这没有什么区别。所以你需要:

{ 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
}

相关内容