代码之家  ›  专栏  ›  技术社区  ›  Wakan Tanka

命令替换中的花括号,该括号分配给bash中的变量

  •  1
  • Wakan Tanka  · 技术社区  · 10 年前

    命令替换中的花括号的用途是什么,它被分配给bash中的变量,例如。

    VAR=$({})
    

    我看到这个构造的地方有代码:

    #!/bin/bash
    test $# -ge 1 || { echo "usage: $0 write-size [wait-time]"; exit 1; }
    test $# -ge 2 || set -- "$@" 1
    bytes_written=$(
    {
        exec 3>&1
        {
            perl -e '
                $size = $ARGV[0];
                $block = q(a) x $size;
                $num_written = 0;
                sub report { print STDERR $num_written * $size, qq(\n); }
                report; while (defined syswrite STDOUT, $block) {
                    $num_written++; report;
                }
            ' "$1" 2>&3
        } | (sleep "$2"; exec 0<&-);
    } | tail -1
    )
    printf "write size: %10d; bytes successfully before error: %d\n" \
        "$1" "$bytes_written"
    

    摘自 here

    1 回复  |  直到 8 年前
        1
  •  2
  •   Barmar    10 年前

    大括号用于对脚本中的多个命令进行分组。它们在命令替换中的含义与在顶级中的含义相同。

    它们就像将命令包装在括号中,除了大括号不会创建子外壳,而括号会创建子外壳(如果命令执行变量赋值或 cd ). 此外,与括号不同,大括号不是自分隔的,因此需要在 { 以及命令定界符(例如。 ; 或换行符) } .

    这在Bash手册的 Grouping Commands