À quoi sert la commande quote
? Je n'ai trouvé aucune information à ce sujet, elle ne figure pas parmi les fichiers exécutables dans les /bin
dossiers et elle ne peut pas être trouvée parmi les intégrés Bash. Il semble qu'il n'imprime que son premier paramètre, comme une echo
commande et rien de plus.
command-line
bash
whtyger
la source
la source
quote
, utilisé à des fins si obscures ... Pas de préfixe pour le marquer "interne", pas de documentation, rien, sauf si vous allez fouiller dans les détails d'implémentation de la mécanique de complétion avancée de la distribution. Je trouve cela un peu dérangeant.Réponses:
Qu'Est-ce que c'est?
J'ai remarqué que cette commande ne fonctionne pas dans mon shell ( poisson, shell interactif convivial ). Il semble que cela ne fonctionne que dans bash (par défaut d'Ubuntu).
Qu'est ce que ça fait? À quoi peut-il servir?
Il ajoute les guillemets mais pas de nouvelle ligne. Il échappe également aux guillemets simples d'une manière adaptée à bash. Il peut être utile dans les scripts de citer une variable ou un autre type de chaîne. Vous en avez besoin par exemple pour les chemins / paramètres avec des espaces. Bien qu'il existe d'autres façons de procéder.
C'est vraiment étrange, je n'ai pu trouver aucune documentation (sur le Web) à ce sujet. Mais bon, c'est facile de voir ce que ça fait.
la source
which
est inutile, à la fois dans les shells interactifs et dans les scripts. Utiliseztype
plutôt.type quote
vous dira que c'est une fonction et affiche même la définition de la fonction. Courezhelp type
pour en savoir plus sur la fonctiontype
intégrée./etc/bash_completion
, qui provient~/.bashrc
par défaut, pas de l'/etc/bash.bashrc
endroit où la section concernant/etc/bash_completion
est commentée. Le/usr/share/bash-completion/
dossier est également absent dans Ubuntu 12.04.quote
est une fonction qui est définie (ici sur mon système Debian, mais je suppose que c'est la même chose sur Ubuntu) dans le fichier/usr/share/bash-completion/bash_completion
, qui lui-même provient/etc/bash.bashrc
du démarrage de Bash.Je n'utiliserais jamais cette fonction! Si vous avez besoin de citer des trucs pour être utilisables en toute sécurité par un shell, veuillez utiliser
printf
avec le%q
modificateur, commeEn fait, même si cela est très rarement utilisé, il existe toujours de meilleures stratégies pour les choses de haut niveau comme nous, les utilisateurs, le faisons habituellement. Cette
quote
chose est utilisée en interne par des choses obscures que nous ne voulons même pas savoir. Cettequote
fonction est probablement spécifique à un fournisseur / distribution (lire spécifique à Debian) et n'est probablement pas portable du tout, et pourrait même changer dans les futures versions.Éditer. Je viens de vérifier sur un système Ubuntu 12.04, et la
quote
fonction est définie dans/etc/bash_completion
, source par/etc/bash.bashrc
, elle-même source par/etc/profile
.Comment ai-je déterminé cela? en utilisant un peu d'heuristique:
Vérifiez si
quote
apparaît dans/etc/profile
:Passez à l'étape suivante.
Par quels fichiers proviennent-ils
/etc/profile
?J'ai
$i
(besoin de se pencher sur la source de ce que ces sources, mais dans ce cas ce sont les fichiers le/etc/profile.d/*.sh
cas échéant (et si facile à lire) et/etc/bash.bashrc
. En regardant dans/etc/bash.bashrc
.quote
en/etc/bash.bashrc
? oui / non, etc ...la source
quote
échappe en fait les guillemets simples, il est donc utilisable par le shell. Cela fonctionne aussi bien queprintf %q
pour ce cas d'utilisation.my_str='~/.bashrc'; echo ' Expected:' "$my_str"; bash -c "echo ' quote:' $(quote "$my_str")"; bash -c "echo 'printf %q:' $(printf '%q\n' "$my_str")"
. Vous verriez quelque chose commeExpected: ~/.bashrc
,quote: ~/.bashrc
etprintf %q: /home/your_username/.bashrc
.(shopt -s extdebug; declare -F quote)
, qui vous indique le nom de la fonction, le numéro de ligne auquel elle est définie et le nom de fichier dansquote
est une fonction:Cette fonction est définie quelque part dans un fichier d'initialisation bash. Plus précisément, si vous utilisez Ubuntu 13.04, vous pouvez le trouver
/usr/share/bash-completion/bash_completion
sur la ligne 142.Utilisez la commande suivante pour le vérifier:
Son objectif est évidemment clair.
la source
$INPUT
, qui peut contenir des espaces, des guillemets ou d'autres caractères, et renvoyer une chaîne qui n'est définitivement traitée que comme un seul argument par bash.