В Bash есть два способа сгруппировать команды:
{ cmd1; cmd2; } и ( cmd1; cmd2 )Снаружи выглядят почти одинаково. На практике - это разное поведение.
▪️ Главное отличие
Конструкция, где выполняется
{} - в текущем shell() - в subshell (дочернем процессе)▪️ Пример с переменными
count=0
{ count=5; }
echo "$count"
Результат: 5. Теперь с ():
count=0
( count=5 )
echo "$count"
Результат: 0. Переменная изменилась в subshell и пропала.
▪️ Практика: перенаправления. {} удобно для группового редиректа:
{
echo "line1"
echo "line2"
} > file.txt
Обе команды попадут в один файл.
▪️ Изоляция через (). Subshell полезен, когда нужно временно изменить окружение:
( cd /tmp && ls )
После выполнения ты останешься в текущем каталоге.
▪️ Типичный кейс
cd /tmp
do_something
cd -
Можно заменить:
( cd /tmp && do_something )
Без риска забыть вернуться обратно.
BashTex 📱 #bash