Como colocar palavras em maiúscula (ou seja, da primeira letra para cima) no KornShell

Como colocar palavras em maiúscula (ou seja, da primeira letra para cima) no KornShell

Existe uma maneira integrada no KornShell de colocar uma palavra em maiúscula, por exemplo korn-> Korn? Um exemplo do Bash 4 para esclarecer:

str='korn'
echo "${str^}"

Se não existe uma maneira abrangente de fazer isso no KornShell, qual é a maneira mais concisa e eficiente de escrever uma função que fará isso?

Responder1

Aqui está uma maneira pura de ksh (ksh93):

function cap {
    typeset -u f
    f=${1:0:1}
    printf "%s%s\n" "$f" "${1:1}"
}

$ cap korn
Korn

Responder2

Se você não tiver o ksh93 disponível, poderá fazê-lo no ksh padrão assim:

function capitalize { 
  typeset -u first
  first=${1%"${1#?}"}
  print "${first}${1#?}"

}

${1#?}remove todos os caracteres correspondentes a "?" desde o início do primeiro argumento. ou seja, retira o primeiro caractere

${var%pattern}tira patterndo final de var. Se usarmos a palavra original menos a primeira letra como padrão ( ${1#?}), obteremos a primeira letra de volta.

typeset -u transforma a primeira letra em maiúscula

$ capitalize "the funky chicken"
The funky chicken

Advertência: na verdade, isso nem sempre funciona, pois você pode ter caracteres regex especiais após a primeira letra da palavra e eles serão interpretados como tal por ${var%pattern}. por exemplo

$ capitalize a*
A**

Responder3

% str='korn'
% echo ${(U)str:0:1}${str#?} 
Korn

informação relacionada