Существуют и другие решения, но я обычно использую простое решение - поместить вывод wc
во временный файл, а затем прочитать оттуда:
wc file.txt > xxx
read lines words characters filename < xxx
echo "lines=$lines words=$words characters=$characters filename=$filename"
lines=2 words=5 characters=23 filename=file.txt
Преимущество этого метода в том, чточто вам не нужно создавать несколько awk
процессов, по одному для каждой переменной.Недостатком является то, что вам нужен временный файл, который вы должны затем удалить.
Будьте осторожны: это не работает:
wc file.txt | read lines words characters filename
Проблема в том, что конвейер к read
создает другойпроцесс, и переменные там обновляются, поэтому они не доступны в вызывающей оболочке.
Редактировать: добавление решения с помощью arnaud576875:
read lines words chars filename <<< $(wc x)
Работает без записи в файл (и делатьнет проблем с трубой).Это зависит от bash.
Из руководства по bash:
Here Strings
A variant of here documents, the format is:
<<<word
The word is expanded and supplied to the command on its standard input.
Ключ - бит "слово расширено".