Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / "Перевод строки" в переменной shell / 7 сообщений из 7, страница 1 из 1
28.08.2008, 23:21:25
    #35512012
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Перевод строки" в переменной shell
Имеется небольшой файлик (в реале строк на 15)
$ cat file
123
456
789
asd

Можно ли этот файлик прочитать в переменную, так чтоб переводы строки (и если можно, табуляция и ведущие пробелы в строках) сохранились?
Пробовал так например
$ a=`cat file`
и так
$ a=$(cat file)
и еще как то..... Все едино - все строки сливаются в одну
$ echo $a
123 456 789 asd
Собственно, задачу то решил без заглатывания файла целиком, но вопрос все же остался.
...
Рейтинг: 0 / 0
29.08.2008, 01:25:57
    #35512107
avb1003
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Перевод строки" в переменной shell
Маразм конечно. IMHO.
Но все-таки, а с чего Вы взяли что проблемы
при присвоении переменной? Как Вы ее проверяли?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
$ cat - > pr_var.c
#include <stdio.h>
#include <string.h>
// Печатает значение переменной
int main(int argc,char *argv[],char *env[]) {
    int i =  0 , var_len;
    char *var =  0 , *p;
    if(argc <  1 ) {
        fprintf(stderr,"Usage %s <var>\n",argv[ 0 ]);
        exit( 1 );
    }
    var = argv[ 1 ];
    var_len = strlen(var);
    while(env[i]) {
        if(var && (p = strstr(env[i],var)) && p[var_len] == '=') {
            printf("%s\n", p+var_len+ 1 );
            exit( 0 );
        }
    i++;
    }
    fprintf(stderr,"var not found\n");
    exit( 1 );
}
^D

$ gcc -o pr_var pr_var.c
$ cat - >  1 .dat
 1111 
 2222 
 3333 
^D

$ export DDDD=`cat  1 .dat`
$ echo $DDDD

 1111   2222   3333 

$ pr_var DDDD

 1111 
 2222 
 3333 
Тo есть по крайней мере в окружении bash запоминает переменную "правильно".

"man bash"
$ man bash
...
Command Substitution
Command substitution allows the output of a command to replace the com-
mand name. There are two forms:

$(command)
or
`command`

Bash performs the expansion by executing command and replacing the com-
mand substitution with the standard output of the command, with any
trailing newlines deleted. Embedded newlines are not deleted, but they
may be removed during word splitting.

...


Какая же была задача ? Зачем оставили себе вопрос?
...
Рейтинг: 0 / 0
29.08.2008, 08:29:38
    #35512215
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Перевод строки" в переменной shell
Тогда, получается что перевод строки съедает echo?


> Зачем оставили себе вопрос?

Дык чтоб разобраться где заблуждаюсь. На шелле пишу весьма редко.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
29.08.2008, 09:26:29
    #35512266
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Перевод строки" в переменной shell
Код: plaintext
1.
2.
3.
4.
5.
#!/bin/sh

IFS=""
a=`cat test.txt`
echo $a


$./test.txt
123
456
789
$
...
Рейтинг: 0 / 0
29.08.2008, 09:31:53
    #35512275
--null--
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Перевод строки" в переменной shell
И конечно, тов. avb1003 совершенно прав - shell как раз запоминает то, что там есть переводы строк

$ myvar=`cat test2.txt`
$ set | grep myvar
$'123\n456\n789'
...
Рейтинг: 0 / 0
29.08.2008, 10:13:32
    #35512361
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Перевод строки" в переменной shell
Вот оно! --null--
Код: plaintext
1.
IFS=""

Хм... все мои "потерянные" символы
IFS - Содержит строку символов, которые используются как разделители в командной строке. Строка, как правило, состоит из пробела, табуляции и символы новой строки.Следовательно, эти самые переводы строки при чтении из переменной интерпретируются как служебные символы. Премного благодарен. Теперь стало понятно ))
...
Рейтинг: 0 / 0
29.08.2008, 13:32:54
    #35513053
avb1003
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
"Перевод строки" в переменной shell
--null--
Код: plaintext
1.
2.
3.
...
IFS=""
..
...

Супер !!!
А я пробовал :
Код: plaintext
1.
$ unset IFS
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / "Перевод строки" в переменной shell / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]