gpt4 book ai didi

linux - 这个 bash 脚本发生了什么?

转载 作者:太空宇宙 更新时间:2023-11-04 04:05:12 25 4
gpt4 key购买 nike

我正在阅读 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 }

最佳答案

{}之间的代码是一个代码块。仅当 rpm 命令成功时才会执行。这是因为这两个命令都是用 AND 运算符 &&

连接起来的

虽然 () 之间的代码块启动子 shell,但大括号之间的代码块不会启动子 shell。您可以关注this guide

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

can only `return' from a function or sourced script

更新您在评论中指出该代码段是函数的一部分。如果是函数的一部分,返回 0 就可以了。

关于linux - 这个 bash 脚本发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21479046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com