string - minusculas - ¿Cómo convertir una cadena de mayúscula a minúscula en Bash?
convertir minusculas a mayusculas bash (7)
¿Por qué no ejecutar en backticks?
x=`echo "$y" | tr ''[:upper:]'' ''[:lower:]''`
Esto asigna el resultado del comando en los backticks a la variable x
. (es decir, no es particular de tr
sino que es un patrón / solución común para las secuencias de comandos shell)
Puedes usar $(..)
lugar de los backticks. Mira here para más información.
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo convertir una cadena a minúsculas en Bash? 19 respuestas
He estado buscando una manera de convertir un valor de cadena de mayúsculas a minúsculas. Todos los resultados de búsqueda muestran enfoques de uso del comando tr
.
El problema con el comando tr
es que puedo obtener el resultado solo cuando uso el comando con la instrucción echo. Por ejemplo:
y="HELLO"
echo $y| tr ''[:upper:]'' ''[:lower:]''
Lo anterior funciona y da como resultado ''hola'', pero necesito asignar el resultado a una variable de la siguiente manera:
y="HELLO"
val=$y| tr ''[:upper:]'' ''[:lower:]''
string=$val world
Cuando asigno el valor como arriba, me da un resultado vacío.
PD: la versión de My Bash es 3.1.17
Esto funcionó para mí. Gracias Rody!
y="HELLO"
val=$(echo $y | tr ''[:upper:]'' ''[:lower:]'')
string="$val world"
una pequeña modificación, si usa un guión bajo junto a la variable, debe encapsular el nombre de la variable en {}.
string="${val}_world"
Estoy en Ubuntu 14.04, con Bash versión 4.3.11. Sin embargo, todavía no me divierto construyendo la manipulación de cadenas ${y,,}
Esto es lo que utilicé en mi script para forzar las mayúsculas:
CAPITALIZED=`echo "${y}" | tr ''[a-z]'' ''[A-Z]''`
La forma correcta de implementar su código es
y="HELLO"
val=$(echo "$y" | tr ''[:upper:]'' ''[:lower:]'')
string="$val world"
Esto usa la notación $(...)
para capturar la salida del comando en una variable. Tenga en cuenta también las comillas alrededor de la variable de string
; las necesita allí para indicar que $val
y world
son una sola cosa que debe asignarse a la string
.
Si tiene bash
4.0 o superior, una forma más eficiente y elegante de hacerlo es usar la manipulación de cadena bash
incorporada:
y="HELLO"
string="${y,,} world"
Si define su variable usando declare (old: typeset), puede indicar el caso del valor a lo largo del uso de la variable.
$ declare -u FOO=AbCxxx
$ echo $FOO
ABCXXX
"-l"
hace lc.
Si está utilizando bash 4 puede usar el siguiente enfoque:
x="HELLO"
echo $x # HELLO
y=${x,,}
echo $y # hello
z=${y^^}
echo $z # HELLO
Use solo uno o ^
para que la primera letra esté en lowercase
o uppercase
.
Tenga en cuenta que tr
solo puede manejar ASCII simple, lo que hace que cualquier solución basada en tr
falle al enfrentarse a caracteres internacionales.
Lo mismo ocurre con la solución bash 4 basada en ${x,,}
.
La herramienta awk
, por otro lado, admite adecuadamente incluso la entrada UTF-8 / multibyte.
y="HELLO"
val=$(echo "$y" | awk ''{print tolower($0)}'')
string="$val world"
Respuesta cortesía de liborw .