Cómo poner en mayúscula una palabra (es decir, desde la primera letra hasta la superior) en KornShell

Cómo poner en mayúscula una palabra (es decir, desde la primera letra hasta la superior) en KornShell

¿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 patterndel 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

información relacionada