В книге «Linux Командная строка» автор приводит пример сортировки массива:
arr=(f e d c b a)
arr_sorted=($(for i in "${arr[@]}"; do echo $i; done | sort))
Вывод из for
l oop (который печатает весь последующий массив значения с echo
) передаются по конвейеру на sort
.
С другой стороны, в другой главе автор представляет аналогичный пример, но использует Bash «групповую команду», которая обозначается окружающими фигурными скобками { }
(я свернул его сценарий, сохранив идею):
declare -A arr # an associative array
arr["key0"]=val0
arr["key2"]=val2
arr["key1"]=val1
{ for i in "${!arr[@]}"; do
printf "%s: %s\n" "$i" "${arr["$i"]}"
done } | sort
Авторская точка зрения: "(...) Также обратите внимание, что весь l oop заключен в фигурные скобки, образуя таким образом групповая команда. Это позволяет передать весь вывод l oop в команду сортировки. "
Однако я запустил этот скрипт (как оригинал книги, так и свернутый) как с без скобок «групповая команда», и все они работали совершенно одинаково - вывод эквивалентен.
Так почему автор настаивает на использовании групповой команды в приведенном выше случае, хотя она прекрасно работает без нее и даже он сам показал аналогичную рабочую версию (с arr_sorted
) в предыдущей главе? Может быть, я что-то здесь упускаю.