Акаш, у вас проблемы, потому что вы не в состоянии процитировать ваши переменные, которые вызывают разбиение слов вывода из echo
(и любой другой команды), создавая впечатление, что пробел не былсохранились.Чтобы исправить проблему, всегда заключайте в кавычки ваши переменные , например,
#!/bin/bash
while IFS= read -r l
do
echo "$l"
echo "$l" > tempf
wc -L tempf | cat > length
len=$(cut -d " " -f 1 length)
echo "$len"
done < "$1"
Пример входного файла
$ cat fn
who -all
system boot 2019-02-13 10:27
run-level 5 2019-02-13 10:27
LOGIN tty1 2019-02-13 10:27 1389 id=tty1
david ? :0 2019-02-13 10:27 ? 3118
david - console 2019-02-13 10:27 old 3118 (:0)
Пример использования /Вывод
$ bash readwspaces.sh fn
who -all
8
system boot 2019-02-13 10:27
40
run-level 5 2019-02-13 10:27
40
LOGIN tty1 2019-02-13 10:27 1389 id=tty1
66
david ? :0 2019-02-13 10:27 ? 3118
58
david - console 2019-02-13 10:27 old 3118 (:0)
63
Кроме того, для чего бы это ни стоило, вы можете сократить ваш скрипт до:
#!/bin/bash
while IFS= read -r l
do
printf "%s\n%d\n" "$l" "${#l}"
done < "$1"