LINUX.ORG.RU

Ответ на: комментарий от phoenix

to phoenix - спасибо конечно, но повтаряю еще раз:
Мне надо в ДВОЙНЫХ кавычках вывести восклецательный знак.

или существует способ подставления в одинарные кавычки переменной?
типа:
echo '$1'?

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

echo "\"!\""
дает:
echo "\"\! ""
>

хрень какая-то :-/

bash --version
GNU bash, version 3.1.14(1)-release (i486-pc-linux-gnu)
Copyright (C) 2005 Free Software Foundation, Inc.

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

А так две реализации echo как отдельная программа когда пишешь в командной строке и когда из скрипта именно баш echo разные вещи!

#!/bin/bash
echo "aaa\"!"\"
сработает баш
на выводе aaa"!"

#!/bin/bash
/usr/bin/echo "aaa\"!"\"
сработает програмное echo и получишь свою ошибку
bash: !\: event not found





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

to sova:
ок
чтобы не было пустой болтавни:
нужно к примеру здесь:

sed "/iface eth0/!n" /etc/network/interfaces

сначала грешил на сед, но тут баш мудрит... :-/
щас проверил на sh в базибоксе - все работает как надо...

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

sova, так уже и сделал...
все нормально...

но всеж почему такая хрень происходит и как обойти?

sed "/iface eth0/!n" из коммандной строки вываливаеться с ошибкой...
и ругаеться на ! :-/

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

Сам подумай почему так происходит =)
Я просто незнаю как это объяснить коротко.
Попробую вдруг верно объясню!
Баш работает в нескольких режимах с ком строки интерактивный
и ввод через терминал может быть канонический и не канонический

~#stty -a </dev/tty1 | grep icanon
~#isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
У меня стоит значит канонический
и соответственно bash отрабатывает каждый введенный символ опираясь на описание терминала
Из этого следует печальный вывод: запущенная программа не обязана поддерживать тот же уровень редактирования, что и bash.
при запуске из скрипта путь прохождения символов не опирается на значения терминала . Причем в X это поведение будет другим .

Примерно вот такая петрушка =) незнаю конечно может я чего и напутал =) Не принимать как истина...

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

не всетаки наверно все прозаичнее =)
В командной строке баш работает в интерактивном режиме и знак ! кажись должен срабатывать как автодополнение из history
нашел вот так работает
echo \"\!
вывод "!
А возможно баг basha

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

>А возможно баг basha

Man читать не пробовали??? Устроили тут обсуждение:

The shell supports a history expansion feature that is similar to the history expansion in csh. This section describes what syntax features are available. This feature is enabled by default for interactive shells, and can be disabled using the +H option to the set builtin command (see SHELL BUILTIN COMMANDS below). Non-interactive shells do not perform history expansion by default.

History expansions are introduced by the appearance of the history expansion character, which is ! by default. Only backslash (\) and single quotes can quote the history expansion character.

Вобщем set +H если надо тестировать из командной сторки что-нибудь содержащие "!"

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