[Comm] quotation in shell

Dmitry V. Levin =?iso-8859-1?q?ldv_=CE=C1_altlinux=2Eorg?=
Вт Фев 22 01:28:47 MSK 2005


On Mon, Feb 21, 2005 at 04:32:14PM +0300, Vitaly Ostanin wrote:
> >>>Подскажите, pls, чем из coreutils из функций bash можно
> >>>экранировать спец. символы в строке?
> >>Условие "из coreutils" обязательно?
> >Нет, это я пытался по-умному выразить доступность и
> >распространённость инструмента :)
> >>А то я бы выбрал sed.
> >Спасибо, попробую.
> Попробовал - не получилось, и это утешает - неужели может быть
> разница в способах экранирования? Скажите, у кого из нас ошибка в
> ДНК - у меня или у growisofs ?

К сожалению, до growisofs ваша ошибка просто не дошла.

Дело в том, что аргументы запускаемой команды формирует shell.
Как бы вы не экранировали спецсимволы внутри переменной, shell не
догадается, что вы занимались экранированием.

Если вы пишете
$ cmd $var
то shell применит к содержимому переменной var "word splitting" и
"pathname expansion".

Если вы пишете
$ cmd "$var"
то shell просто отдаст значение переменной var в том виде, в каком оно
есть.

Если вы хотите добиться чего-то отличного от вышеприведённых вариантов,
то следует вспомнить про eval.

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

args=
for i in "$@"; do
	args="$args \"$(printf %s "/$i=$i" |sed -e 's/[\`"$]/\\&/g')\""
done
eval env -i strace -e trace=execve /bin/true "$args"


-- 
ldv
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя     : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип     : application/pgp-signature
Размер  : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url     : <http://lists.altlinux.org/pipermail/community/attachments/20050222/2b7489d5/attachment-0003.bin>


Подробная информация о списке рассылки community