Bach скобки: (), {}, $(), [], [[]]
Эта шпаргалка поможет быстро вспомнить, как работают разные типы скобок в Bash - они используются для команд, массивов, условий, циклов и подстановок.
$(commands)
Выполняет команду и сохраняет вывод. Позволяет сохранить в переменной результат команды.
log_file="/var/log/syslog" keyword="error" output=$(grep "$keyword" "$log_file")
{ list; }
Выполняет группу команд в том же процессе оболочки. Фигурные скобки объединяют команды для последовательного выполнения в текущем окружении.
{
sudo apt install exa
echo exa
echo "Listed files using exa"
}
( list )
Выполняет список команд в отдельном подпроцессе (subshell). Команды выполняются изолированно от основной оболочки.
( cd /home/user ls whoami )
( a b c )
Создает массив значений. Позволяет хранить несколько элементов в одной переменной.
files=(log.txt log2.txt log3.txt)
for file in "${files[@]}"; do
echo "Processing $file"
done
{range}
Создает последовательности строк. Позволяют генерировать наборы строк или чисел, удобно для пакетных операций.
for file in backup_{1..4}.tar.gz; do
mv "$file" /var/oldbackups
done
${variable}
Доступ к значению переменной. Обычно используется, если нужно добавить к значению текст или символы.
username="John"
greeting="Hello, ${username}!"
echo "$greeting"
${expression}
Изменяет содержимое переменной. Расширение параметров позволяет менять значение переменной, например, расширение файла .txt на .bak.
filename="report.txt"
backup_file="${filename%.txt}.bak"
echo "Backup file: $backup_file"
$((expression))
Выполняет арифметические операции. Двойные круглые скобки используются для вычислений: сложение, умножение и т.п.
num1=5 num2=3 result=$((num1 * num2 + 1))
[ expression ]
Проверяет условие. Классическая команда test. Это встроенная утилита POSIX, работающая во всех шеллах (sh, bash, zsh). Она НЕ поддерживает логические операторы &&, || и шаблоны == *.txt, только простые проверки: существует ли файл, равны ли строки, больше ли число и т.п.
Все аргументы должны быть разделены пробелами, иначе будет ошибка синтаксиса.
file="/etc/passwd" if [ -f "$file" ]; then echo "File exists" fi
if [ "$a" = "$b" ]; then echo "Equal" fi
[[ expression ]]
Проверяет условие. Современный, улучшенный вариант в Bash и Zsh.
- безопаснее в кавычках (не ломается при пустых значениях);
- поддерживает логические операторы
&&и||; - понимает шаблоны (
== *.log) и регулярные выражения (=~ regex); - не требует кавычек вокруг переменных (ошибки не будет, если переменная пуста).
user=$USER if [[ $user == "root" ]]; then echo "You are the root user" fi
if [[ $file == *.txt && -f $file ]]; then echo "Text file exists" fi
[ ... ]— старый POSIX-совместимый синтаксис, безопасен для скриптов, работающих в разных шеллах.[[ ... ]]— современный синтаксис Bash, безопаснее и мощнее для сложных условий.
