LINUX.ORG.RU

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

Я смутно понял задачу честно говоря, др и я пьян, но восклицательный знак - меньшее из зол, его можно экранировать. Сложнее кавычку одинарную обработать, если переменные выводишь. Для решения я пользовал самописный парсер на си, который принтфом можно в баше заменить. Греп поймет ! Только с экраном \

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

в конструкции grep -Po '(?<!афафаф)' экранирование ! не работает!

teod0r ★★★★★
() автор топика

Запихай «set +H» в bashrc или ещё куда, если ты не пользуешься подстановкой истории через восклицательный знак.

Xenius ★★★★★
()

Кстати, да

Давно хотел узнать как это сделать:

squirre1@eeepc_host ~ $ echo "asd!"
bash: !": event not found
squirre1@eeepc_host ~ $ echo "asd\\!"
asd\!
squirre1@eeepc_host ~ $ echo "asd\!"
asd\!
squirre1@eeepc_host ~ $ echo "asd""!"""
bash: !: event not found
squirre1@eeepc_host ~ $ echo "asd""!"""
bash: !: event not found
zekka
()

если из конструкции

C="`echo тра ля ля|grep -Po '(?<!тра) ляля'`"
убрать двойные кавычки, то не ругается.
а в каких ситуациях кавычки при задании переменной необходимы? вдруг есть ситуации, где их присутствие для переменной необходимо?

teod0r ★★★★★
() автор топика
Последнее исправление: teod0r (всего исправлений: 1)
Ответ на: Кстати, да от zekka

Внезапно... Так - работает:

squirre1@eeepc_host ~ $ echo 'asd!'
asd!
zekka
()
Ответ на: комментарий от ziemin

как это связано с моим вопросом?

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

спс.
а хистэкспанд интересная штука, наподобие !bang в уткауткаиди

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

1. -e нет в sh.

2. Теперь оно соснёт с VAR='\n'.

anonymous
()
Ответ на: комментарий от teod0r

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

значение раскрывается ОДИН раз. Т.е. заключать $() в кавычки не нужно.

А вообще — не стоит злоупотреблять конвейерами и вообще таким говном обмазываться. Это совет.

emulek
()
Ответ на: комментарий от teod0r

слеш это спецсимвол.

но в 'кавычках' слеш простой символ.

И да, в интерактивном режиме ! работает иначе, в скрипте это простой символ.

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

в 'кавычках' слеш простой символ.

я спрашивал, почему экранирование для ! кавычками и бэкслешем - разные вещи, для других вещей же что так что так можно экранировать

в скрипте это простой символ.

действительно. что-то я не внимателен.
но на конструкцию в скрипте grep -Po '(?<!\\)' внутри задания переменной он ругается:
grep: missing )

teod0r ★★★★★
() автор топика
Последнее исправление: teod0r (всего исправлений: 1)
Ответ на: комментарий от teod0r

я спрашивал, почему экранирование для ! кавычками и бэкслешем - разные вещи, для других вещей же что так что так можно экранировать

а оно как-то по особому работает в кавычках. Я не в курсе, я не ставлю такие сложные конструкции, и тебе не советую. Лучшего результата для сложного выполнения строки даёт eval.

но на конструкцию в скрипте grep -Po '(?<!fafafa)' внутри задания переменной он ругается: grep: missing )

не видит вторую скобку. Я, если честно, не помню, как такая хрень обрабатывается, возможно оно всё fafafa) считает единым целым.

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

вот как у меня выглядит моя конструкция в скрипте
C=`echo «$@»|grep -Po '(?<!\\) -c+'`

если \\ заменить на fafaf то нет ошибки с ')'.
это только в скрипте так. если выполнять просто в консоли, то со скобками всё нормально

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

это только в скрипте так. если выполнять просто в консоли, то со скобками всё нормально

а не. там тоже ругается на скобку. это если не в переменной делать не ругается

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

C=«`echo «$@»|grep -Po '(?<!\\) -c+'`»

вот ты и пришёл к тому, что стало причиной написания этой темы

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

вдруг есть ситуации, где их присутствие для переменной необходимо?

да, действительно, например когда в результвте грепа нужно получить что-то с пробелом

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

Ты на баше задолбаешься учитывать все возможные варианты символьных данных, подходящих под экраны/управляющие символы и так далее. Конечно, можно код увеличить и сделать проверки на кавычки, !, / и так далее, но это геморрой - на типизированных языках проще

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

Вообще я по-питону, просто вижу, что остальное упоминают в таком контексте.

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