LINUX.ORG.RU

Echo и экранирование спец-символов

 ,


0

1

Что-то никак не найду как экранировать >> ' <<символ.

Что нужно на выходе в файле:

IP=`/sbin/ifconfig ixp1.14 |grep "inet addr:"|cut -f 2 -d ':'|cut -f 1 -d ' '`
HN=`/bin/hostname`
HT='/etc/hosts'
echo -e "$IP $HN\n$IP localhost" > $HT

как делаю:

echo -e 'IP=`/sbin/ifconfig ixp1.14 |grep "inet addr:"|cut -f 2 -d "':'"|cut -f 1 -d ' '`\nHN=`/bin/hostname`\nHT='/etc/hosts'\necho -e "$IP $HN\\n$IP localhost > $HT"' >/tmp/file

На выходе имею:

IP=`/sbin/ifconfig ixp1.14 |grep "inet addr:"|cut -f 2 -d ":"|cut -f 1 -d  `
HN=`/bin/hostname`
HT=/etc/hosts
echo -e "$IP $HN\n$IP localhost > $HT"

$ echo -e 'IP=`/sbin/ifconfig ixp1.14 |grep "inet addr:"|cut -f 2 -d '\'':'\''|cut -f 1 -d '\'' '\''`\nHN=`/bin/hostname`\nHT='\''/etc/hosts'\''\necho -e "$IP $HN\\n$IP localhost > $HT"'
IP=`/sbin/ifconfig ixp1.14 |grep "inet addr:"|cut -f 2 -d ':'|cut -f 1 -d ' '`
HN=`/bin/hostname`
HT='/etc/hosts'
echo -e "$IP $HN\n$IP localhost > $HT"
arturpub ★★ ()
Ответ на: комментарий от Dr0id

Это не жесть, просто хитрый ход. В '-строке экранирования в принципе нет, поэтому ты завершаешь строку (первая '), потом вне строки экранируешь \', потом заново открываешь. Засчет того, что между тремя токенами (...', \', '...) нет пробелов, шел сливает это все в одну строку. Собственно все.

upd: гребаные пони

arturpub ★★ ()
Последнее исправление: arturpub (всего исправлений: 1)
<<EOF cat
IP=\`/sbin/ifconfig ixp1.14 |grep "inet addr:"|cut -f 2 -d ':'|cut -f 1 -d ' '\`
HN=\`/bin/hostname\`
HT='/etc/hosts'
echo -e "$IP $HN\n$IP localhost" > $HT
EOF
anonymous ()
Ответ на: комментарий от anonymous
echo -e "\$IP \$HN\n\$IP localhost" > \$HT

Конечно же

anonymous ()

Как дети малые.

Заносишь апостроф в переменную и вперед!

q="'"   ###  " ' "
echo "Privet $qDr0id$q"

Privet 'Dr0id'

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

А какая разница? Если компилятор/интерпретатор динамически сортирует твои данные по типам - это явно не строгая типизация.

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

Я, давным давно, когда надо было передавать пару байтов при минимуме потерь на код, использовал echo. Потом понял, что кавычки надо передавать вместе с костылями, так как в них заворачиваешь свои данные при вызове переменных, что заставляет извращаться с экранированием. Потому я поменял инструмент на printf(«%STRONG_TYPE_OF_DATA\n», dazhe_kavychka_data); и забыл про использование скриптовых языков при обработке тонкой материи

minakov ★★★★★ ()
Ответ на: комментарий от sdio
$ q="'"   ###  " ' "
$ echo "Privet $qDr0id$q"
Privet '

Но в целом идея тсу думаю понятна.

Кстати, если у нас двойные кавычки, то сабжевая проблема исчезает, а если одинарные, то исчезает интерполяция :)

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

Я на питоне ровно один раз писал. До того момента, пока он мне не стал указывать куда можно кавычку всунуть, а куда - стилистическая ошибка. Так что спорить не буду, использую perl и си как пример. В одном строго int для int, в другом - $i=Чего_Душе_Угодно, если лень

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

не работает ни в баше, ни в ksh. кстати, ему надо было вставить одинарную кавычку в поток _экранированный одинарными кавычками_, так что метод с переменной в любом случае не катит

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

то есть, познания в программировании у тебя весьма ограниченны, но при этом, цитируя классика, ты даешь советы космического масштаба и космичекой же глупости, при этом попытно путая термины. строгая и статическая типизация — независимые явления. http://ru.wikipedia.org/wiki/Типизация_данных#.D0.9A.D0.BE.D0.BD.D1.82.D1.80.....

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

ему надо было вставить одинарную кавычку в поток _экранированный одинарными кавычками_

echo 'Begin'\''body'\''End'
echo 'Begin'$q'body'$q'End'

По мне так строка с $q читабельнее, глаза не спотыкаются на схожих символах '\"

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

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

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