& Ldquo; цитата & Rdquo; команда в оболочке

Что такое использование команды quote? Я не нашел никакой информации об этом, ее нет среди исполняемых файлов в папках /bin, и ее нельзя найти среди встроенных команд Bash. Кажется, что он печатает только свой первый параметр, как команда echo и ничего более.

15
задан 7 October 2013 в 19:59

3 ответа

Что это?

Я заметил, что эта команда не работает в моей оболочке ( fish, дружественная интерактивная оболочка ). Кажется, он работает только в bash (по умолчанию в Ubuntu).

chocobai@pc ~> /bin/bash 
chocobai@pc:~$ quote asdf
'asdf'chocobai@pc:~$ 

chocobai@pc:~$ type quote
quote is a function.
quote ()
{ 
    local quoted=${1//\'/\'\\\'\'};
    printf "'%s'" "$quoted"
}

Что это делает? Для чего он может использоваться?

Он добавляет кавычки, но без новой строки. Он также экранирует одинарные кавычки способом, подходящим для bash. В сценариях может быть полезно заключить в кавычки переменную или какой-либо другой вид строки. Это необходимо, например, для путей / параметров с пробелами. Хотя есть и другие способы сделать это.

Это действительно странно, я не смог найти никакой документации (в сети) об этом. Но хорошо, легко увидеть, что он делает.

0
ответ дан 7 October 2013 в 19:59

quote - это функция, которая определена (здесь, в моей системе Debian, но я думаю, что это то же самое в Ubuntu) в файле /usr/share/bash-completion/bash_completion, который сам по себе получен из /etc/bash.bashrc при запуске Bash.

Я бы никогда не использовал эту функцию! Если вам нужно заключить в кавычки материал, чтобы его можно было безопасно использовать в оболочке, используйте printf с модификатором %q, например:

printf '%q\n' "Hello my friend I like 'single quotes' as well as \"double quotes\""

На самом деле, даже если это очень редко используется, всегда лучшие стратегии для вещей высокого уровня, как мы, пользователи, обычно делаем. Эта вещь quote используется внутренне некоторыми неясными вещами, о которых мы даже не хотим знать. Эта quote функция, вероятно, зависит от поставщика / дистрибутива (читайте для Debian) и, вероятно, вообще не переносима, и может даже измениться в будущих выпусках.

Редактировать. Я только что проверил систему Ubuntu 12.04, и функция quote определена в /etc/bash_completion, полученной из /etc/bash.bashrc, а сама из /etc/profile.

Как я это определил? используя немного эвристики:

  • Проверьте, появляется ли quote в /etc/profile:

    grep '\bquote\b' /etc/profile
    

    Нет. Перейти к следующему шагу.

  • Какие файлы получены из /etc/profile?

    grep '[[:space:]]\.[[:space:]]' /etc/profile
    

    У меня есть $i (нужно поискать источник, что это за источники, но в данном случае это файлы [ 1118], если таковые имеются (и если читаемо) и /etc/bash.bashrc. Поиск в /etc/bash.bashrc.

  • Находится ли quote в /etc/bash.bashrc? Да / нет и т. Д.
  • [ 1136]
0
ответ дан 7 October 2013 в 19:59

quote - это функция:

quote () 
{ 
    local quoted=${1//\'/\'\\\'\'};
    printf "'%s'" "$quoted"
}

Эта функция определена где-то в файле инициализации bash. Точнее, если вы используете Ubuntu 13.04, вы можете найти его в /usr/share/bash-completion/bash_completion в строке 142.

Используйте следующую команду, чтобы проверить это:

type quote

Его назначение очевидно ясно.

0
ответ дан 7 October 2013 в 19:59

Другие вопросы по тегам:

Похожие вопросы: