我正在读一个shell脚本,我偶然发现:
rpm -q ${package} >&2 && {
log notice "Package ${package} is already installed. Great."
return 0 }这显然已经用了很长时间了,但我不知道这是什么样的语法。braces..how中的部分可以有这样的大括号,我以前从未见过bash脚本,在这种情况下,您会突然使用没有任何函数名或任何东西的花括号,而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 }发布于 2014-01-31 11:33:30
{}之间的代码是一个代码块。只有当rpm命令成功时,它才会被执行。这是因为这两个命令都与AND操作符&&连接在一起
当()之间的代码块启动子While时,在花括号之间的代码块不会启动子While。你可以跟着本指南
但是,在发布命令的表单中,它将导致语法错误:
can only `return' from a function or sourced script您在注释中告诉Update,代码片段是函数的一部分。如果是一个函数的一部分,那么return 0就可以了。
https://stackoverflow.com/questions/21479046
复制相似问题