J'ai cherché SO et trouvé que mettre en majuscule une chaîne suivante fonctionnerait
str="Some string"
echo ${str^^}
Mais j'ai essayé de faire la même chose avec un argument en ligne de commande, ce qui m'a donné l'erreur suivante
A essayé
#!/bin/bash
## Output
echo ${1^^} ## line 3: ${1^^}: bad substitution
echo {$1^^} ## No error, but output was still smaller case i.e. no effect
Comment pourrions-nous faire cela?
bash
t-il?Réponses:
La syntaxe
str^^
que vous essayez est disponible à partir de Bash 4.0 et versions ultérieures. La vôtre est peut-être une version plus ancienne (ou vous avez exécuté le script avecsh
explicitement):Essaye ça:
la source
tr '[a-z]' [[A-Z]'
.tr '[a-z]' '[A-Z]'
.GNU bash, version 4.3.42(1)-release (x86_64-apple-darwin14.5.0)
, et j'obtiens la même erreur que OP, donc je ne pense pas que cela soit disponible sur les versionsbash
4.0 et supérieures comme vous le dites.Sortie:
la source
/
commetr /a-z/ /A-Z/
avant mon édition: cela fonctionne car il remplace/
par/
mais est inutile: pubs.opengroup.org/onlinepubs/9699919799/utilities/tr.html Il existe également le plus obscur et le moins utiletr '[:lower:]' '[:upper:]'
.Soyez prudent avec tr sauf si AZ est tout ce que vous utilisez. Pour les autres locales, même '[: lower:]' '' [: upper:] '' échoue, seuls Touk et bash (v4 +) de awk fonctionnent
la source
tr '[:lower:]' '[:upper:]'
travaille maintenant pour votre exemple sur OS X au moins (aussi avecLC_ALL=sv_SE
)Vous pouvez également basculer vers ksh ou zsh, qui prennent en charge la conversion de cas depuis des décennies (bien avant que cela
bash
ne soit${var^^}
ajouté à la version 4.0), avec une syntaxe différente:(fonctionne également avec
zsh
; notez que dans pdksh / mksh, cela ne fonctionne que pour les lettres ASCII).Avec
zsh
, vous pouvez également utiliser l'U
indicateur d'expansion de paramètre:POSIXLY, vous pouvez utiliser:
Il y a aussi:
Mais dans quelques implémentations, y compris GNU
tr
, cela ne fonctionne que pour les caractères mono-octet (donc dans les locales UTF-8, uniquement sur les lettres ASCII).la source
Si quelqu'un essaie toujours d'erreur en essayant
${str^^}
, vous pouvez essayerpython -c
ouperl
c'est probablement parce que la version de bash est inférieure à 4.Mais jusqu’à présent, bash 4 ou plus fonctionne rapidement avec la solution existante.
Utilisation
python -c
de bashDe même, il peut également être utilisé pour capitaliser avec:
En utilisant
perl
la source