2014-02-11 4 views
3

Я не новичок в оболочке, но все же запутался в некоторых не столь сложных проблемах с котировками. Наверное, должно быть что-то непонятое.Confusing Shell Quotation

a: echo 'Don\'t quote me // Don quote me 
b: echo Don'\t' quote me // Don quote me 
c: echo Don\t quote me // Dont quote me 
d: echo Don"\t" qoute me // Don quote me 

Выше трех цитат идет совершенно против моей интуиции. Не одинарная кавычка '...' буквально возвращает то, что цитируется? Что я думал ...

Для: в одиночном кадре 'Don\', \ - не что иное, как общий характер. Таким образом, a) должно быть Don\t quote me.

Для b: a), '\t' подавлено специальное значение \t, поэтому я думал, что b) должно быть Don\t quote me.

Для c: Я понимаю, почему c работает, но не понимает разницу между & b и c.

Для d: нет разницы между ' и "?

Возможно я неправильно понять, как shell синтаксического анализа и выполнить линию команды ..

Проблема решена с помощью /bin/echo вместо (built-in)echo на Mac. Последний будет интерпретировать обратную косую черту.

+2

вы поставляете '' -e' в echo'? – devnull

+0

Я использую Mac, и для 'echo' нет опции' -e'. Вы имеете в виду '-n'? – qweruiop

+1

Ваше 'эхо', кажется, интерпретирует символы обратного слэша. – devnull

ответ

3

По Баш

  1. первый должен вернуть Дон \ т котировка мне
  2. второй должен вернуться, как и первый
  3. в третий должен вернуться Dont quote me
  4. последнему нужно вернуться Don \ t qoute me

Почему:

  1. первый один вы scaped донского \ т, поместив его в одинарные кавычки
  2. вы scaped только \ т
  3. нет нет scaping, потому что \ т означает Печать символа после того, как \ как
  4. двойных символы отпущения цитаты оленьей кожи отпущения
+0

Да, вот что я подумал. Итак, что заставляет выглядеть странно, так это то, что мое 'echo' интерпретирует обратную косую черту, после того как строки были возвращены, как вы описали, не так ли? – qweruiop

+0

вы можете проверить псевдонимы, возможно, вы используете эхо с параметрами –

+0

Вместо этого я использую '/ bin/echo', теперь все работает так, как вы сказали. Раньше я использовал «встроенное эхо». – qweruiop

3

Ваше понимание цитирования оболочки верно, но, похоже, что echo на OSX - это встроенная оболочка, которая интерпретирует escape-обратные сбрасывания. Это поведение можно отключить, выполнив shopt -u xpg_echo.

Смотрите здесь для получения дополнительной информации: How can I escape shell arguments in AppleScript?