首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >这个巴什剧本是怎么回事?

这个巴什剧本是怎么回事?
EN

Stack Overflow用户
提问于 2014-01-31 11:31:22
回答 1查看 83关注 0票数 0

我正在读一个shell脚本,我偶然发现:

代码语言:javascript
复制
rpm -q ${package} >&2 && {
log notice "Package ${package} is already installed. Great."
return 0 }

这显然已经用了很长时间了,但我不知道这是什么样的语法。braces..how中的部分可以有这样的大括号,我以前从未见过bash脚本,在这种情况下,您会突然使用没有任何函数名或任何东西的花括号,而rpm -q只是隐式地是一个if语句。

我理解它的作用,这是相当明显的,因为bash是相当容易的,但它的语法抛出我。

这是函数的代码:

代码语言:javascript
复制
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 }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-31 11:33:30

{}之间的代码是一个代码块。只有当rpm命令成功时,它才会被执行。这是因为这两个命令都与AND操作符&&连接在一起

()之间的代码块启动子While时,在花括号之间的代码块不会启动子While。你可以跟着本指南

但是,在发布命令的表单中,它将导致语法错误:

代码语言:javascript
复制
can only `return' from a function or sourced script

您在注释中告诉Update,代码片段是函数的一部分。如果是一个函数的一部分,那么return 0就可以了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21479046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档