Здравствуйте!
Есть некоторый sh-скрипт:
...
echo "select field FROM ttt WHERE name='$name';" | mysql --user=admin --host=localhost --database=test --password=**** | grep -v 'field'
...Все работает, но до тех пор, пока в переменной $name не появится символ "'". Как обойти проблему?
>Здравствуйте!
>Есть некоторый sh-скрипт:
>...
>echo "select field FROM ttt WHERE name='$name';" | mysql --user=admin --host=localhost --database=test
>--password=**** | grep -v 'field'
>...
>
>Все работает, но до тех пор, пока в переменной $name не появится
>символ "'". Как обойти проблему?Обратный слеш "\"
>[оверквотинг удален]
>>Есть некоторый sh-скрипт:
>>...
>>echo "select field FROM ttt WHERE name='$name';" | mysql --user=admin --host=localhost --database=test
>>--password=**** | grep -v 'field'
>>...
>>
>>Все работает, но до тех пор, пока в переменной $name не появится
>>символ "'". Как обойти проблему?
>
>Обратный слеш "\"ну так понятно, что обратный слеш. Как его поставить туда? В PHP есть функция addslashes(), а вот на shell... Тут-то функции такой нету. А как замену в строке сделать - не могу придумать.
>А как замену в строке сделать - не могу придумать.Например, так:
[c0der@xxx ~]$ echo "string with ' symbol" | sed "s|'|\\\'|g"
string with \' symbol
>>А как замену в строке сделать - не могу придумать.
>
>Например, так:
>
>[c0der@xxx ~]$ echo "string with ' symbol" | sed "s|'|\\\'|g"
>string with \' symbolА вот какая загагулина:
echo $line | sed "s|'|\\\'|g" - работает норм;
var=`echo $line | sed "s|'|\\\'|g"` - присваевает переменной var значение $line (sed не выполняется).
Ничего не понимаю...
>echo $line | sed "s|'|\\\'|g" - работает норм;
>var=`echo $line | sed "s|'|\\\'|g"` - присваевает переменной var значение $line (sed
>не выполняется).
>Ничего не понимаю...Надо так:
line="kfkfkl ' jfjfkfkf"
var=$(echo $line | sed "s|'|\\\'|g")
echo $var
выведется:
kfkfkl \' jfjfkfkf
>var=`echo $line | sed "s|'|\\\'|g"` - присваевает переменной var значение $line (sed
>не выполняется).
>Ничего не понимаю...Тут дело в двух парах ковычек: одна ``, другая "".
Если `` обязательны вместо $(), то нужно писать так:
var=`echo $line | sed "s|'|\\\\\'|g"`
Только пять слешей будут работать правильно.
спасибо, добрые люди! ;)
>>var=`echo $line | sed "s|'|\\\'|g"` - присваевает переменной var значение $line (sed
>>не выполняется).
>>Ничего не понимаю...
>
>Тут дело в двух парах ковычек: одна ``, другая "".
>Если `` обязательны вместо $(), то нужно писать так:
>var=`echo $line | sed "s|'|\\\\\'|g"`
>Только пять слешей будут работать правильно.Объясни, пожалуйста, почему именно пять слешей?