Какая польза от команды quote
? Я не нашел никакой информации об этом, ее нет среди исполняемых файлов в /bin
папках, и ее нельзя найти среди встроенных программ Bash. Кажется, что он печатает только свой первый параметр, как echo
команда и ничего более.
command-line
bash
whtyger
источник
источник
quote
используемое для такой непонятной цели ... Нет префикса, чтобы пометить его как «внутренний», нет документации, ничего, если вы не копаетесь в деталях реализации продвинутой механики завершения дистрибутива. Я нахожу это немного тревожным.Ответы:
Что это?
Я заметил, что эта команда не работает в моей оболочке ( рыба, дружественная интерактивная оболочка ). Кажется, он работает только в bash (по умолчанию в Ubuntu).
Что оно делает? Для чего это можно использовать?
Это добавляет кавычки, но без новой строки. Он также экранирует одинарные кавычки способом, подходящим для bash. В сценариях может быть полезно заключить в кавычки переменную или какой-либо другой вид строки. Это необходимо, например, для путей / параметров с пробелами. Хотя есть и другие способы сделать это.
Это действительно странно, я не смог найти никакой документации (в сети) об этом. Но хорошо, легко увидеть, что он делает.
источник
which
бесполезен, как в интерактивных оболочках, так и в скриптах. Используйтеtype
вместо этого.type quote
скажет вам, что это функция, и даже покажет определение функции. Бегиhelp type
больше наtype
встроенном./etc/bash_completion
, и она поставляется~/.bashrc
по умолчанию, а не там,/etc/bash.bashrc
где/etc/bash_completion
закомментирован соответствующий раздел . Также/usr/share/bash-completion/
в Ubuntu 12.04 отсутствует папка.quote
это функция, которая определена (здесь, в моей системе Debian, но я полагаю, что то же самое в Ubuntu) в файле/usr/share/bash-completion/bash_completion
, который сам получен/etc/bash.bashrc
при запуске Bash.Я бы никогда не использовал эту функцию! Если вам нужно процитировать материал так, чтобы безопасно использовать снаряд, пожалуйста , используйте
printf
с%q
модификатором, как:На самом деле, даже это очень редко используется, всегда есть лучшие стратегии для вещей высокого уровня, как мы, пользователи, обычно делаем. Эта
quote
вещь используется внутренне некоторыми неясными вещами, о которых мы даже не хотим знать. Этаquote
функция, вероятно, зависит от поставщика / дистрибутива (читайте о Debian) и, вероятно, вообще не переносима и может даже измениться в будущих выпусках.Редактировать. Я только что проверил систему Ubuntu 12.04, и
quote
функция определена в/etc/bash_completion
источнике/etc/bash.bashrc
, полученном самим/etc/profile
.Как я это определил? используя немного эвристики:
Проверьте,
quote
появляется ли в/etc/profile
:Нет. Перейти к следующему шагу.
Какие файлы получены
/etc/profile
?У меня есть
$i
(нужно искать в источнике, что это за источники, но в этом случае это файлы,/etc/profile.d/*.sh
если таковые имеются (и если для чтения) и/etc/bash.bashrc
. Глядя в/etc/bash.bashrc
.quote
в/etc/bash.bashrc
? да / нет и т.д ...источник
quote
на самом деле экранирует одинарные кавычки, поэтому он может использоваться оболочкой. Это работает так же хорошо, как иprintf %q
для этого варианта использования.my_str='~/.bashrc'; echo ' Expected:' "$my_str"; bash -c "echo ' quote:' $(quote "$my_str")"; bash -c "echo 'printf %q:' $(printf '%q\n' "$my_str")"
. Вы увидите что - то вродеExpected: ~/.bashrc
,quote: ~/.bashrc
иprintf %q: /home/your_username/.bashrc
.(shopt -s extdebug; declare -F quote)
, который сообщает вам имя функции, номер строки, в которой она определена, и имя файла, в котором она определена.quote
это функция:Эта функция определена где-то в файле инициализации bash. Точнее, если вы используете Ubuntu 13.04, вы можете найти его в
/usr/share/bash-completion/bash_completion
строке 142.Используйте следующую команду, чтобы проверить это:
Его цель очевидна.
источник
$INPUT
, которая может содержать пробелы, кавычки или другие символы, и возврата строки, которая определенно рассматривается bash как единственный аргумент.