命令替换中的花括号,在bash中赋值给变量

时间:2015-03-12 00:32:25

标签: bash syntax

命令替换中的花括号的目的是什么,在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 个答案:

答案 0 :(得分:2)

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

它们就像将命令包装在括号中,除了花括号不创建子shell,而圆括号(如果命令执行变量赋值或cd之类的事情则这很重要)。此外,与括号不同,花括号不是自我分隔的,因此您需要在{之后的空格和;之前的命令分隔符(例如}或换行符)。

这在Grouping Commands

的Bash手册部分中有记录