【问题标题】:begin end or brackets for bash?bash的开始结束或括号?
【发布时间】:2013-05-18 05:47:58
【问题描述】:

我正在尝试进行一些 bash 编程,并希望使其具有一定的结构性。 我的问题是,如果我想将块代码嵌入到像 Pascal begin & end 或 C {} 这样的括号中,只是为了将一组逻辑上原子的命令组合在一起,BASH 中有没有办法做到这一点。

我可以考虑使用空洞的条件或循环,但这有点难看。

谢谢

【问题讨论】:

  • 在大多数语言中,您只在循环体、if、函数、开关等周围使用开始/结束括号。为此,Bash 有do/endif/ficase/esac。你还需要什么结构?
  • @Barmar do/done,实际上。 ;)

标签: bash syntax


【解决方案1】:

Bash 支持大括号。

{
  cmd1
  cmd2
}

请注意,必须在右大括号之前有一个命令分隔符。

{ cmd1 ; cmd2 ; }

【讨论】:

  • 这就是我要找的。应该猜到C方式有效。引用 gnu 复合命令的另一个答案也很有帮助。谢谢。
【解决方案2】:

Bash 并没有真正的变量作用域,所以除了流量控制之外,我认为你不会取得太多成就。为什么不使用某些功能?

【讨论】:

  • 作用域可以通过子shell来实现,命令分组可用于将许多输出位通过管道传输到单个命令调用中。 { foo ; bar ; } | baz
  • 同意。但是,虽然生成子 shell 以避免大量意外全局变量之间的冲突可能会帮助您构建代码,但您通常会获得令人不快的资源消耗。最重要的是,它并没有真正扩展。
  • @mogul:大括号不会创建子shell,只是逻辑分组。您可能会想到括号,它会创建子shell。
  • 但这仍然打印 222,这意味着最初加载到 X 的 123 在范围之外被覆盖:X=123; { X=222; }; echo $X
【解决方案3】:

请注意,bash 块在任何特定意义上都不是“原子的”。请参阅 bash 手册页(即,如果在 unix 系统上运行 man bash),或在线查找:

http://www.gnu.org/software/bash/manual/bashref.html

您应该从第 3.2.4 节,复合命令开始。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 2011-05-29
    • 2021-04-15
    • 2015-05-15
    • 2022-12-19
    • 1970-01-01
    相关资源
    最近更新 更多