URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 61069
[ Назад ]

Исходное сообщение
"bash script: присвоить переменной строку из файла"

Отправлено serg3263 , 19-Окт-05 16:53 
Нужно переменной присвоить в кач значения стоку из файла,
как в примере
-------------------------
for item in $(cat $file)
do
...
done
--------------------------
Но строка с пробелами трактуется bash как отдельные значения...

Как присвоить "всю" строку вместе с пробелами?


Содержание

Сообщения в этом обсуждении
"bash script: присвоить переменной строку из файла"
Отправлено Brainbug , 19-Окт-05 17:14 
>Нужно переменной присвоить в кач значения стоку из файла,
>как в примере
>-------------------------
>for item in $(cat $file)
>do
>...
>done
>--------------------------
>Но строка с пробелами трактуется bash как отдельные значения...
>
>Как присвоить "всю" строку вместе с пробелами?

[tmp]$ cat test
1 2 3 4 5
[tmp]$ cat 1.sh
#!/bin/sh
for i in `cat test`
do
        echo ${i}
done
[tmp]$ ./1.sh
1
2
3
4
5


"bash script: присвоить переменной строку из файла"
Отправлено serg3263 , 19-Окт-05 17:51 
>>Как присвоить "всю" строку вместе с пробелами?
>
>[tmp]$ cat test
>1 2 3 4 5
>[tmp]$ cat 1.sh
>#!/bin/sh
>for i in `cat test`
>do
>        echo ${i}
>done
>[tmp]$ ./1.sh
>1
>2
>3
>4
>5

А как получить результат

1 2 3 4 5

?

Это должно быть применено в скрипте с файловыми операциями:
1. читаем пути и имена файлов из файла,
   ------
   path1/name1
   path2/name2
   path3/name3
   ...
   ------
2. преобразуем (экранируем badsymbols),
   badpath!/bad!name --> badpath\!/bad\!name
   bad path/bad name --> bad\ path/bad\ name
3. передаем полученные строки командам bash.

Проблема возникает на path/name с пробелами:
   bad path/bad name
в опреаторе for интерпретируется как 3 значения:
   bad
   path/bad
   name

Требуется переменной присвоить "всю строку" сразу а не
фрагменты по мере наличия пробелов.


"bash script: присвоить переменной строку из файла"
Отправлено Brainbug , 19-Окт-05 18:00 
>>>Как присвоить "всю" строку вместе с пробелами?
>>
>>[tmp]$ cat test
>>1 2 3 4 5
>>[tmp]$ cat 1.sh
>>#!/bin/sh
>>for i in `cat test`
>>do
>>        echo ${i}
>>done
>>[tmp]$ ./1.sh
>>1
>>2
>>3
>>4
>>5
>
>А как получить результат
>
>1 2 3 4 5
>
>?
>
>Это должно быть применено в скрипте с файловыми операциями:
>1. читаем пути и имена файлов из файла,
>   ------
>   path1/name1
>   path2/name2
>   path3/name3
>   ...
>   ------
>2. преобразуем (экранируем badsymbols),
>   badpath!/bad!name --> badpath\!/bad\!name
>   bad path/bad name --> bad\ path/bad\ name
>3. передаем полученные строки командам bash.
>
>Проблема возникает на path/name с пробелами:
>   bad path/bad name
>в опреаторе for интерпретируется как 3 значения:
>   bad
>   path/bad
>   name
>
>Требуется переменной присвоить "всю строку" сразу а не
>фрагменты по мере наличия пробелов.


Togda tozhe samoje 4to i newser napisal:
#!/bin/sh
cat test | while read i
do
        echo ${i}
done


[tmp]$ ./1.sh
1 2
3
[tmp]$ cat test
1 2
3


"bash script: присвоить переменной строку из файла"
Отправлено newser , 19-Окт-05 17:17 
>Нужно переменной присвоить в кач значения стоку из файла,
>как в примере
>-------------------------
>for item in $(cat $file)
>do
>...
>done
>--------------------------
>Но строка с пробелами трактуется bash как отдельные значения...
>
>Как присвоить "всю" строку вместе с пробелами?

Можно так:

cat $file | while read item
do
...
done


"bash script: присвоить переменной строку из файла"
Отправлено serg3263 , 19-Окт-05 18:57 

>
>Можно так:
>
>cat $file | while read item
>do
>...
>done


Работает, спасибо.