Есть два способа сохранить вывод команды в переменную. Формально оба работают, но один из них устарел.
▪️ Правильный способ
files=$(ls /etc)
Плюсы:
легко читать
можно вкладывать команды
меньше сюрпризов с экранированием
count=$(wc -l < file.txt)
▪️ Устаревший способ
files=`ls /etc
Минусы:
плохо читается
сложно экранировать
вложенность превращается в ад
# выглядит ужасно и ломается
result=`echo \`date\``
▪️ Почему backticks ломают скрипты
`
конфликтует с кавычкамиошибки трудно отлаживать
в больших скриптах быстро становится нечитаемо
▪️ Общая ловушка: переносы строк. Оба способа схлопывают переводы строк в пробелы:
list=$(cat file)
Если важны строки:
mapfile -t list < file
BashTex 📱 #bash #utils