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

Можно ли этот файлик прочитать в переменную, так чтоб переводы строки (и если можно, табуляция и ведущие пробелы в строках) сохранились?
Пробовал так например
$ a=`cat file`
и так
$ a=$(cat file)
и еще как то..... Все едино - все строки сливаются в одну
$ echo $a
123 456 789 asd
Собственно, задачу то решил без заглатывания файла целиком, но вопрос все же остался.
...
Рейтинг: 0 / 0
"Перевод строки" в переменной shell
    #35512107
avb1003
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Маразм конечно. 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
"Перевод строки" в переменной shell
    #35512215
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда, получается что перевод строки съедает echo?


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

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

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


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

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

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

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


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