Busqué SO y descubrí que, en mayúscula, una cadena siguiente funcionaría
str="Some string"
echo ${str^^}
Pero intenté hacer algo similar en un argumento de línea de comandos, que me dio el siguiente error
Intentó
#!/bin/bash
## Output
echo ${1^^} ## line 3: ${1^^}: bad substitution
echo {$1^^} ## No error, but output was still smaller case i.e. no effect
¿Cómo podemos hacer esto?
bash
?Respuestas:
La sintaxis
str^^
que está intentando está disponible en Bash 4.0 y superior. Quizás la tuya sea una versión anterior (o ejecutaste el scriptsh
explícitamente):Prueba esto:
fuente
tr '[a-z]' [[A-Z]'
.tr '[a-z]' '[A-Z]'
.GNU bash, version 4.3.42(1)-release (x86_64-apple-darwin14.5.0)
y obtengo el mismo error que OP, así que no creo que esté disponible en ningunabash
versión 4.0 o superior como usted dice.Salida:
fuente
/
que entr /a-z/ /A-Z/
antes de mi edición: esto sólo funciona porque se reemplaza/
por el/
, pero es inútil: pubs.opengroup.org/onlinepubs/9699919799/utilities/tr.html También existe la más oscura y menos útiltr '[:lower:]' '[:upper:]'
.Tenga cuidado con tr a menos que AZ sea todo lo que use. Para otros entornos locales, incluso '[: lower:]' '[: upper:]' falla, solo funciona el toupper y bash (v4 +) de awk
fuente
tr '[:lower:]' '[:upper:]'
está trabajando ahora para su ejemplo en OS X al menos (también conLC_ALL=sv_SE
)Alternativamente, puede cambiar a ksh o zsh que han tenido soporte para la conversión de mayúsculas y minúsculas durante décadas (mucho antes
bash
de que se${var^^}
agregara en 4.0), aunque con una sintaxis diferente:(también funciona con
zsh
; tenga en cuenta que en pdksh / mksh, eso solo funciona para letras ASCII).Con
zsh
, también puede usar elU
indicador de expansión de parámetros:POSIBLEMENTE, puede usar:
También hay:
Pero en algunas implementaciones, incluida GNU
tr
, eso solo funciona para caracteres de un solo byte (por lo tanto, en configuraciones regionales UTF-8, solo en letras ASCII).fuente
Si alguien sigue recibiendo errores al intentarlo
${str^^}
, puede intentarlopython -c
operl
es probable porque la versión bash es inferior a 4.Pero, hasta ahora, bash 4 o superior está funcionando rápidamente con la solución existente.
Usando
python -c
en bashDel mismo modo, también se puede utilizar para capitalizar con:
Utilizando
perl
fuente