Como capitalizar a palavra (ou seja, a primeira letra para a parte superior) no KornShell

1

Existe uma maneira integrada no KornShell de capitalizar uma palavra, por exemplo? korn - > %código%? Um exemplo de Bash 4 para esclarecer:

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

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

    
por Kazark 16.07.2012 / 16:55

2 respostas

3

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

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

$ cap korn
Korn
    
por 16.07.2012 / 22:39
3

Se você não tem o ksh93 disponível, você pode fazê-lo no ksh padrão da seguinte forma:

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

}

${1#?} retira todos os caracteres correspondentes "?" desde o começo do primeiro arg. isto é, retira o primeiro caractere

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

typeset -u transforma a primeira letra maiúscula

$ capitalize "the funky chicken"
The funky chicken

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

$ capitalize a*
A**
    
por 09.02.2015 / 18:57

Tags