Скажи, у меня есть этот файл:
hello
world
hello world
Эта программа
#!/bin/bash
for i in $(cat $1); do
echo "tester: $i"
done
выходы
tester: hello
tester: world
tester: hello
tester: world
Я хотел бы иметь for
итерацию по каждой строке, игнорируя при этом пробельные символы, то есть последние две строки должны быть заменены на
tester: hello world
Использование кавычек for i in "$(cat $1)";
приводит i
к назначению всего файла за один раз. Что я должен изменить?
источник
<
сделать целым циклом. Хотя теперь этоIFS \ read -r line' in second example. Is really
IFS = `необходимо? ИМХО этого достаточно, чтобы сказать:while read -r line; do echo "tester: $line"; done < "$1"
IFS=
отключает удаление начальных и конечных пробелов. См Вwhile IFS= read..
, почему не делает МФС никакого эффекта?Что бы это ни стоило, мне нужно делать это довольно часто, и я никогда не могу вспомнить точный способ использования
while IFS= read...
, поэтому я определил следующую функцию в своем профиле bash:Эта функция сначала определяет количество строк в файле, затем использует ее
sed
для извлечения строки за строкой и передает каждую строку в качестве единственного строкового аргумента любой данной функции. Я полагаю, что это может быть действительно неэффективно с большими файлами, но это не было проблемой для меня до сих пор (предложения по улучшению этого приветствия, конечно).Использование довольно сладкое ИМО:
источник