Bash 4, expansion et mise en minuscules

Je vois que dans Bash> lexpansion des variables 4.0 est utilisée pour minuscules une variable. Par exemple

echo ${variable,,} 

En lisant la page de manuel je ne comprends vraiment pas pourquoi le shell convertit la chaîne en minuscules.

Une expression de séquence prend la forme {x..y [.. incr]}, où x et y sont soit entiers ou caractères uniques, et incr, un incrément facultatif, est un entier. Lorsque des entiers sont fournis, lexpression se développe en chaque nombre compris entre x et y, inclus. Les entiers fournis peuvent être précédés de «0» pour forcer chaque terme à avoir le même largeur. Lorsque x ou y commence par un zéro, le shell tente de forcer tous les termes générés à contenir le même nombre de chiffres, en remplaçant par zéro si nécessaire. Lorsque des caractères sont fournis, lexpression se développe lexicographiquement en chaque caractère entre x et y, inclus, en utilisant les paramètres régionaux par défaut C. Notez que x et y doivent être du même type. Lorsque lincrément est fourni, il est utilisé comme différence entre chaque terme. Lincrément par défaut est 1 o r -1 selon le cas.

Pourquoi la variable est-elle convertie en minuscules?

Réponse

Vous « lisez la mauvaise section de la documentation; regardez plutôt expansion des paramètres du shell .

${parameter^pattern}

${parameter^^pattern}

${parameter,pattern}

${parameter,,pattern}

Cette extension modifie la casse des caractères alphabétiques dans parameter. Le pattern est développé pour produire un modèle comme dans le développement de nom de fichier. Chaque caractère de la valeur développée de parameter est testé par rapport à pattern et, sil correspond au modèle, sa casse est convertie. Le modèle ne doit pas tenter de faire correspondre plus dun caractère. L’opérateur «^» convertit le modèle de correspondance des lettres minuscules en majuscules; l’opérateur ‘,’ convertit les lettres majuscules correspondantes en minuscules. Les extensions «^^» et «,,» convertissent chaque caractère correspondant dans la valeur développée; les extensions «^» et «,» correspondent et ne convertissent que le premier caractère de la valeur développée. Si pattern est omis, il est traité comme un «?», Qui correspond à chaque caractère. Si parameter vaut «@» ou «*», l’opération de modification de casse est appliquée à chaque paramètre de position à son tour, et le développement est la liste résultante. Si parameter est une variable de tableau indexée avec @ ou *, lopération de modification de casse est appliquée à chaque membre du tableau à son tour, et le développement est la liste résultante.

Réponse

Vous citez la partie « Expansion des accolades », Une « extension daccolade » ne commence pas par un $.

Vous devez exécuter cette commande:

LESS=+/"\{parameter\^pattern\}" man bash 

Pour trouver la partie de la « modification de la casse » qui commence par un $ (${ ^^ }).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *