%20no%20KornShell.png)
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 pattern
do 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