%20en%20KornShell.png)
¿Existe una forma integrada en KornShell de poner en mayúscula una palabra, por ejemplo korn
-> Korn
? Un ejemplo de Bash 4 para aclarar:
str='korn'
echo "${str^}"
Si no existe una forma integrada de hacer esto en KornShell, ¿cuál es la forma más concisa y eficiente de escribir una función que lo haga?
Respuesta1
Aquí hay una forma pura de ksh (ksh93):
function cap {
typeset -u f
f=${1:0:1}
printf "%s%s\n" "$f" "${1:1}"
}
$ cap korn
Korn
Respuesta2
Si no tiene ksh93 disponible, puede hacerlo en ksh estándar de esta manera:
function capitalize {
typeset -u first
first=${1%"${1#?}"}
print "${first}${1#?}"
}
${1#?}
elimina todos los caracteres que coinciden con "?" desde el comienzo del primer argumento. es decir, elimina el primer carácter
${var%pattern}
Se quita pattern
del final de var
. Si usamos la palabra original menos la primera letra como patrón ( ${1#?}
), obtenemos la primera letra.
typeset -u convierte la primera letra en mayúscula
$ capitalize "the funky chicken"
The funky chicken
Advertencia: en realidad, esto no siempre funciona, ya que podría tener caracteres de expresiones regulares especiales después de la primera letra de la palabra y serán interpretados como tales por ${var%pattern}
. p.ej
$ capitalize a*
A**
Respuesta3
% str='korn'
% echo ${(U)str:0:1}${str#?}
Korn