在下面的代码中,我需要在第一个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
答案 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中非常便携。)