我不确定我是否理解与分组相关的大括号的含义。我能看到的唯一与使用常规 () 不同的是 {} 表示在当前 shell 中执行而不是在子 shell 中执行。但经过测试,似乎有某种方法可以在 {} 内格式化数据,这与常规 () 不同。例如,我测试了以下内容:
$ {who}
bash: {who}: command not found
[john@pc ~]$
[john@pc ~]$ {who;}
bash: syntax error near unexpected token `}'
[john@pc ~]$ {who ;}
bash: syntax error near unexpected token `}'
[john@pc ~]$ { who ;}
john tty1 2022-11-30 14:51
显然,使用 {} 存在某种结构,但我无法在网上或书中找到任何资源来向我解释这一点。谁能帮我理解一下。
答案1
该{ }
语法被命名为分组表达。
它不同于子外壳 ( )
产生一个新的外壳。
请注意,此语法需要在 and 周围留有空格{
并以}
a;
结尾排队表达式,如:
{ grep user /etc/passwd | awk '1'; }
多行表达式中不需要:
{
grep user /etc/passwd |
awk '1'
}
此语法是将多个命令组合到一个流的有用方法:
{ cmd1; cmd2; cmd3; } | grep ...
推荐链接:
- http://mywiki.wooledge.org/BashGuide/CompoundCommands#Command_grouping
- https://www.gnu.org/software/bash/manual/bash.html#Command-Grouping
为了不与大括号扩展喜欢{1..9}