8

Как использовать двойные или одинарные скобки, круглые скобки и фигурные скобки?

1

Я запутался в использовании скобок, круглых скобок и фигурных скобок в Bash, а также в различии между их двойной и одинарной формами. Может ли кто-то дать четкое объяснение?

2 ответ(ов)

3

Конечно, вот перевод на русский в стиле ответов на StackOverflow:

Квадратные Скобки (Brackets)

if [ CONDITION ]    # Конструкция проверки
if [[ CONDITION ]]  # Расширенная конструкция проверки
Array[1]=element1   # Инициализация массива
[a-z]               # Диапазон символов в регулярном выражении
$[ expression ]     # Нестандартный и устаревший вариант $(( expression )) [1]

[1] http://wiki.bash-hackers.org/scripting/obsolete

Фигурные Скобки (Curly Braces)

${variable}                            # Подстановка параметра
${!variable}                           # Косвенная ссылка на переменную
{ command1; command2; ...; commandN; } # Блок кода
{string1,string2,string3,...}          # Расширение фигурных скобок
{a..z}                                 # Расширенное расширение фигурных скобок  
{}                                     # Замена текста после find и xargs

Скобки (Parentheses)

( command1; command2 )             # Блок кода, выполняемый в подпроцессе
Array=(element1 element2 element3) # Инициализация массива
result=$(COMMAND)                  # Замена команды, новый стиль
>(COMMAND)                         # Подстановка процессов
<(COMMAND)                         # Подстановка процессов

Двойные Скобки (Double Parentheses)

(( var = 78 ))            # Целочисленная арифметика
var=$(( 20 + 5 ))         # Целочисленная арифметика с присваиванием переменной
(( var++ ))               # Инкремент переменной в стиле C
(( var-- ))               # Декремент переменной в стиле C
(( var0 = var1<98?9:21 )) # Тернарная операция в стиле C

Если у вас есть дополнительные вопросы или требуется уточнение, не стесняйтесь спрашивать!

0

Скобки в определении функции

Скобки () используются при определении функции:

function_name () { command1 ; command2 ; }

По этой причине вам нужно экранировать скобки даже в параметрах команд:

$ echo (
bash: ошибка синтаксиса рядом с неожиданным токеном `newline'

$ echo \(
(

$ echo () { command echo Команда echo была переопределена. ; }
$ echo anything
Команда echo была переопределена.
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь