Как повторять буквальное "-n"

Вы делаете это так же, как меняет местами две переменные в CилиBASIC:tmp = a; a = b; b = tmp;-)

Пример:

p
foobar
s/foo/FOO/
s/bar/foo/
s/FOO/bar/
p
barfoo

Замените FOOвыше любым символом или текстом, которого нет в вашей строке.

3
22.04.2021, 21:28
3 ответа

Используя -eи восьмеричное число 55 для-:

$ echo -e '\055n'
-n

... или восьмеричное 156 для n, или восьмеричное для обоих:

$ echo -e '\055\0156'
-n

Если -eвас беспокоит, установите параметр оболочки xpg_echo, чтобы echoвсегда интерпретировал последовательности обратной косой черты (обычно это не то, что вам нужно):

$ shopt -s xpg_echo
$ echo '-\0156'
-n

echoв bashтакже распознает шестнадцатеричный:

$ echo -e '\x2d\x6e'
-n
5
28.04.2021, 22:51

Спасибо за все ответы. Я добавлю один из моих собственных, о котором я только что подумал:

echo -n -;echo n
1
28.04.2021, 22:51

Поместите любой символ перед " -n" и используйте escape-последовательность " \b" в режиме -e, чтобы стереть его в конечном выводе. В приведенном ниже примере используется пробел для фиктивного символа :

.
$ echo -e " \b-n"
-n

Пояснение:

$ man echo
       If -e is in effect, the following sequences are recognized:
       \b     backspace

Это работает визуально для печати вывода на терминал:

$ echo -e " \b-n" | tee /tmp/test
-n
$ cat /tmp/test
-n

Но вы можете столкнуться с проблемами, если вам нужно проанализировать вывод, так как он создает невидимый символ возврата:

$ echo -e " \b-n" | wc -c
5
$ wc -c <<< $(echo -e " \b-n")
5
$ echo -e "--" | wc -c
3
-1
28.04.2021, 22:51

Теги

Похожие вопросы