Что такое использование команды quote
? Я не нашел никакой информации об этом, ее нет среди исполняемых файлов в папках /bin
, и ее нельзя найти среди встроенных команд Bash. Кажется, что он печатает только свой первый параметр, как команда echo
и ничего более.
Я заметил, что эта команда не работает в моей оболочке ( 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. В сценариях может быть полезно заключить в кавычки переменную или какой-либо другой вид строки. Это необходимо, например, для путей / параметров с пробелами. Хотя есть и другие способы сделать это.
Это действительно странно, я не смог найти никакой документации (в сети) об этом. Но хорошо, легко увидеть, что он делает.
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
? Да / нет и т. Д. quote
- это функция:
quote ()
{
local quoted=${1//\'/\'\\\'\'};
printf "'%s'" "$quoted"
}
Эта функция определена где-то в файле инициализации bash. Точнее, если вы используете Ubuntu 13.04, вы можете найти его в /usr/share/bash-completion/bash_completion
в строке 142.
Используйте следующую команду, чтобы проверить это:
type quote
Его назначение очевидно ясно.