我正在通过shell脚本阅读,我发现了这个:
rpm -q ${package} >&2 && {
log notice "Package ${package} is already installed. Great."
return 0 }
这显然已经工作很长一段时间了,但是我无法弄清楚这是什么样的语法..花括号里面的部分..你可以有这样的花括号,我从未见过像这样的bash shell脚本之前你突然使用花括号而没有任何函数名或任何东西,并且rpm -q只是隐式地是if语句。
我理解它的作用,它相当明显,因为bash非常简单,但它的语法却让我感到高兴。
这是该函数的代码:
434 yum_install() {
435 [[ $# -lt 1 ]] && die "not enough parameters"
436 local package="${1}"
437
438 log info "Verifying package ${package} with rpm"
439 if test -z "${package}"; then
440 die "no package name provided to yum_install"
441 fi
442
443 # Return if package is already installed
444 rpm -q ${package} >&2 && {
445 log notice "Package ${package} is already installed. Great."
446 return 0
447 }
448
449 die "Package ${package} required. Please install."
450 }
答案 0 :(得分:0)
{}
之间的代码是代码块。仅当rpm
命令成功时才会执行。这是因为两个命令都与AND运算符&&
虽然()
之间的代码块启动子shell,但大括号之间的代码块不会启动子shell。您可以关注this guide
但是,在您发布命令的形式中,它将导致语法错误:
can only `return' from a function or sourced script
更新您在评论中告诉该代码段是函数的一部分。如果函数的一部分return 0
没问题。