Как использовать двойные или одинарные скобки, круглые скобки и фигурные скобки?
Я запутался в использовании скобок, круглых скобок и фигурных скобок в Bash, а также в различии между их двойной и одинарной формами. Может ли кто-то дать четкое объяснение?
2 ответ(ов)
Конечно, вот перевод на русский в стиле ответов на 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
Если у вас есть дополнительные вопросы или требуется уточнение, не стесняйтесь спрашивать!
Скобки в определении функции
Скобки ()
используются при определении функции:
function_name () { command1 ; command2 ; }
По этой причине вам нужно экранировать скобки даже в параметрах команд:
$ echo (
bash: ошибка синтаксиса рядом с неожиданным токеном `newline'
$ echo \(
(
$ echo () { command echo Команда echo была переопределена. ; }
$ echo anything
Команда echo была переопределена.
Как объединить строковые переменные в Bash
Как экранировать одиночные кавычки внутри строк, заключённых в одиночные кавычки
Когда нужны фигурные скобки вокруг переменных в оболочке?
Преимущественны ли двойные квадратные скобки [[ ]] над одинарными [ ] в Bash?
Тернарный оператор (?:) в Bash