2015-03-12 4 views
1

Какова цель фигурных скобок внутри подстановки команд, которая назначается переменной в bash, например.фигурные скобки внутри командной подстановки, присвоенные переменной в bash

VAR=$({}) 

Существует код, где я видел эту конструкцию:

#!/bin/bash 
test $# -ge 1 || { echo "usage: $0 write-size [wait-time]"; exit 1; } 
test $# -ge 2 || set -- "[email protected]" 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

ответ

2

фигурных скобок используются для нескольких команд группы в скрипте. Они имеют то же значение внутри подстановки команд, как и на верхнем уровне.

Они похожи на завершение команд в круглых скобках, за исключением того, что фигурные скобки не создают подоболочку, в то время как круглые скобки (это имеет значение, если команды выполняют такие вещи, как присвоения переменных или cd). Кроме того, в отличие от круглых скобок фигурные скобки не являются саморазграничивающими, поэтому вам необходимо иметь пробел после { и разделитель команд (например, ; или новую строку) до }.

Это описано в разделе руководства Баш на Grouping Commands

+0

эхо $$ против (эхо $$) возвращает тот же PID так, где к югу от оболочки вы упомянули? –

+0

'foo = 1; (Foo = 2); echo $ foo' echoes '1', а не' 2'. – Barmar

+0

Можете ли вы указать мне некоторые дополнительные ссылки? –

Смежные вопросы