Цикл Perl в вопросе читает из все аргументы имени файла в командной строке или из стандартного ввода, если файлы не указаны. Все ответы, которые я вижу, обрабатывают один файл или стандартный ввод, если файл не указан.
Хотя часто выводится точно как UUOC (Бесполезное использование cat
), бывают случаи, когда cat
является лучшим инструментом для работы, и можно утверждать, что это один из них:
cat "$@" |
while read -r line
do
echo "$line"
done
Единственным недостатком этого является то, что он создает конвейер, работающий в под-оболочке, поэтому такие вещи, как присвоение переменных в цикле while
, недоступны вне конвейера. bash
Обходной путь - это Замена процесса :
while read -r line
do
echo "$line"
done < <(cat "$@")
Это оставляет цикл while
работающим в основной оболочке, поэтому переменные, установленные в цикле, доступны вне цикла.