Получить общий размер нескольких файлов из переменной, содержащей список файлов

Я хочу узнать общий размер некоторых файлов, имена файлов которых могут содержать пробелы:

cd /tmp touch "a0 1" touch "a1 1" 

Я помещаю эти имена файлов в переменные и составляю список:

  • Перенаправление stdout в терминал и файл без использования канала?
  • Разделить с помощью sed
  • Поиск истории команд
  • Как получится, когда x = abc, ] && echo yes || эхо не возвращается?
  • исполняемый файл в $ PATH, все еще не распознанный
  • .bashrc псевдоним не работает
  •  var0="/tmp/a0 1" var1="/tmp/a1 1" var2=`echo -e "$var0\n$var1"` 

    Теперь, если я проверю себя и распечатаю этот список, все будет хорошо:

     echo "$var2" #returns: #/tmp/a0 1 #/tmp/a1 1 

    Но если я попытаюсь получить общий размер, он как-то неправильно понимает символ «\ n»

     du "$var2" #returns: #du: cannot access '/tmp/a0 1\n/tmp/a1 1': No such file or directory 

    Как создать процесс «\ n» в качестве разделителя строк? Или, может быть, мне нужно создать список по-другому?

  • bash: перепутанный дисплей для длинных строк
  • Как писать повторяющиеся строки свободной формы в файл, так же быстро, как «dd»?
  • Как использовать команду чтения с вопросом и переменной alltogether?
  • Копирование файлов на основе даты / времени из поднабора каталогов
  • Есть ли способ протестировать PS1 Bash Prompts перед их выполнением?
  • Лучший способ запуска одиночного цикла вместо двух для циклов
  • 2 Solutions collect form web for “Получить общий размер нескольких файлов из переменной, содержащей список файлов”

    Я бы предложил использовать массив

     var2=( "$var0" "$var1" ) du "${var2[@]}" 

    См. BashGuide / Массивы

    Решение, которое я нашел, состояло в том, чтобы разделить var2 по очереди в цикле while:

     #!/bin/bash var0="/tmp/a0 1" var1="/tmp/a1 1" var2="$(echo -e "$var0\n$var1")" totalsize=0; #this will make script return 0 if var2 somehow contains empty lines only while read "opened_file" #for each file in list do do if [ ! -z "$opened_file" ]; then #if variable is not empty tmp1="$(du -b "$opened_file" | cut -d" " -f1)" #get size of current file and strip unnecessary fields totalsize=$(($totalsize + $tmp1)) fi done <<< "$(echo -e "$var2")" echo "$totalsize" 
    Linux и Unix - лучшая ОС в мире.