bash中是否有返回关键字?

时间:2015-12-06 14:17:40

标签: git bash

在下面的代码中,我需要在第一个if语句中使用return关键字。我需要在echo.b

之后退出该函数
push() {
  a=$1
  b=$2
  if [ $# -eq 0 ]
  then
     echo "Enter git shortname for first argument"
  fi

  if [ $# -eq 1 ]
  then
      b=$(timestamp)
  fi
  git add -A .
  git commit -m $b
  git push $a
  echo "push() completed."
}

研究

Google提起SO article

4 个答案:

答案 0 :(得分:2)

BASH确实有return,但您可能不需要它。您可以使用:

push() {
  a="${1?Enter git shortname for first argument}"

  [[ $# -eq 1 ]] && b=$(timestamp)
  b=$2

  git add -A .
  git commit -m $b
  git push $a
  echo "push() completed."
}
如果您没有向其传递任何参数,

a="${1?Enter git shortname for first argument}"将自动从函数返回并显示错误消息。

答案 1 :(得分:1)

重写它,使其始终从底部退出。如果构造使用嵌套,那么你不必在中间拯救。

答案 2 :(得分:1)

bash return声明有什么问题?

push() {
  a=$1
  b=$2
  if [ $# -eq 0 ]
  then
     echo "Enter git shortname for first argument"
     return
  fi

  if [ $# -eq 1 ]
  then
      b=$(timestamp)
  fi
  git add -A .
  git commit -m $b
  git push $a
  echo "push() completed."
}

答案 3 :(得分:1)

require_once

上述内容应该在push() { local a="$1" b="$2" #don't overwrite global variables [ "$#" -eq 0 ] && { 1>&2 echo "Enter git shortname for first argument" #stderr return 64 #EX_USAGE=64 } : "${b:=`timestamp`}" #default value git add -A . git commit -m "$b" #always quote variables, unless you have a good reason not to git push "$a" 1>&2 echo "push() completed." } 以及dash中运行,如果您想利用更快的启动时间。

为什么要引用?

如果您不引用,变量将分为bash中的字符,默认情况下为空格换行符,以及标签字符。此外,未加引号变量的内容中的星号 glob -expanded。通常,您既不需要拆分也不想要全局扩展,并且您可以通过双引号来取消订阅此行为。

我认为这是一个很好的做法,默认情况下引用,并在你不引用时评论案例,因为你真的想要分裂或在那里进行分组。

$IFS在分配中不进行拆分或全局展开,因此Bash中的local a=$1是安全的,但是其他shell(最突出的是bash)会这样做。{{ 1}}是超安全的,与变量在其他地方的行为一致,并且在shell中非常便携。)