кавычки в переменной (bash, dash)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Ответить
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux

кавычки в переменной

Сообщение Bizdelnick »

$

$ args="'head -n1' 'tail -n1'" $ echo $args 'head -n1' 'tail -n1' $ echo | pee $args sh: 0: Illegal option -1 sh: 1: Syntax error: Unterminated quoted string sh: 0: Illegal option -1 sh: 1: Syntax error: Unterminated quoted string $


ЧЯДНТ?
Интересует не решение конкретной проблемы (она уже решена совершенно другим путём), а именно причина ошибки.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5289
ОС: Gentoo

Re: кавычки в переменной

Сообщение /dev/random »

Кавычки обрабатываются до подстановки переменных (см. раздел EXPANSION в man bash). Поэтому кавычки внутри переменной - это просто символы, не имеющие специального значения.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: кавычки в переменной

Сообщение Bizdelnick »

А, вон оно что. А откуда тогда "Unterminated quoted string"?
По идее pee должен был бы попытаться выполнить команду 'head с тремя аргументами -n1', 'tail и -n1'. Однако видно, что он пытается выполнить две команды.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5289
ОС: Gentoo

Re: кавычки в переменной

Сообщение /dev/random »

Bizdelnick писал(а):
28.09.2013 20:01
А, вон оно что. А откуда тогда "Unterminated quoted string"?

pee пытается запустить 4 команды:

'head
-n1'
'tail
-n1'

Каждую он передаёт шеллу как самостоятельный скрипт. И уже шелл ругается.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: кавычки в переменной

Сообщение Bizdelnick »

Да, точно, теперь дошло. Спасибо!
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: кавычки в переменной

Сообщение drBatty »

Bizdelnick писал(а):
28.09.2013 19:24
Интересует не решение конкретной проблемы (она уже решена совершенно другим путём), а именно причина ошибки.

а что такое pee?

ну а вообще -- да, кавычки они являются самыми обычными символами ПОСЛЕ того, как оказались в переменной.

Код: Выделить всё

$ X=A\"B
$ echo $X
A"B
$ Y=$X
$ echo $Y
A"B

Как видите, ДО того, как они завернулись, мне пришлось поставить бэкслэш.
Bizdelnick писал(а):
28.09.2013 20:01
А, вон оно что. А откуда тогда "Unterminated quoted string"?

а вот это уже ваша pee видать таким образом распарсила свои параметры.
Hint: use set -x
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20794
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: кавычки в переменной

Сообщение Bizdelnick »

drBatty писал(а):
28.09.2013 20:16
а что такое pee?

http://manpages.ubuntu.com/manpages/natty/man1/pee.1.html
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current
Контактная информация:

Re: кавычки в переменной

Сообщение drBatty »

Bizdelnick
а... Точно! Как же я забыл про мочу кошки!

Вот что думает по этому поводу гуглотранслятор:
Обратите внимание, что в то время как это похоже на тройник, копия вход не отправляется на стандартный вывод, как и тройник делает. Если это требуется, то используйте мочу кошки ...


http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Ответить