LINUX.ORG.RU

[bash] Написать '-n' или '\n'

 


0

2
echo "${N}"

Переменная N может принимать различные значения. В том числе '-n'. И это приводит к тому что эта переменная не выводится на экран. Команда echo считает что это специальная опция команды echo.

man echo -n do not output the trailing newline

А надо чтобы вывело

-n

Если я вместо echo использую «printf --»

printf -- "${N}"
Тогда "-n" пишет на экран. Но тогда появляется проблема printf escape последовательностей. Когда переменная N равна «bla\n12345», printf находит в переменной подстроку «\n» и делит строку на две подстроки.
bla
12345
А надо чтобы вывело
bla\n12345

Как вывести в баше без какой либо обработки вообще любую строку, строки идентичные аргументам команд, строки содержащие escape последовательности без их интерпритации ?

> Переменная N может принимать различные значения. В том числе '-n'.

1. Что значит эта переменная? (просто любопытство)

2. Необходимо выводить только лишь ее значение за раз или этого можно избежать? Пробел в конце подойдет?

anonymous
()

Решено

gcc echorawnl.c -o echorawnl

#include <stdio.h>
#include <stdlib.h>

#define TRUE  1
#define FALSE 0

int main (int argc, char **argv)
{

if (argc == 1)
    {
    putchar ('\n');

    return EXIT_SUCCESS;
    };

int i_i;
i_i = 1;

while (TRUE)
    {
    fputs (argv[i_i], stdout);
    
    if (i_i == (argc - 1))
        {
        break;
        };
    
    putchar (' ');
    
    i_i++;
    };

putchar ('\n');

return EXIT_SUCCESS;
};

someloruser
() автор топика
Ответ на: комментарий от someloruser

все же лучше выкручиваться существующими средствами

[root]# var="-n"
[root]# echo «${var} »
-n

[root]# var="-n very long string 1 2 3 \n"
[root]# echo «${var} »
-n very long string 1 2 3 \n
[root]#


Все дело в дополнительном пробеле перед заключительной кавычкой.
Чтобы его убрать в выводе, то пойдет что то типа:
echo «${var} » | sed 's/ $//'

hi_artem
()
Ответ на: Решено от someloruser

Слава велосипедистам.

anonymous
()
Ответ на: Решено от someloruser

убиват!! за такое форматирование

anonymous
()

Мне, кстати, кажется, что это баг
$ echo '-n 1 2 3'
-n 1 2 3
$ echo «$s»
-n 1 2 3
$ s='-n'
$ echo 0"$s" | tail -c+2
-n
Наверное так можно.

Xenius ★★★★★
()
Ответ на: комментарий от Xenius

У echo должна быть опция — которая игнорируется, но позволяет прекратить интерпретацию аргументов с дефисами.

Xenius ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.