Как сделать слово заглавным (т.е. первую букву заглавной) в KornShell

Как сделать слово заглавным (т.е. первую букву заглавной) в KornShell

Есть ли встроенный способ в KornShell сделать слово заглавным, например korn-> Korn? Пример Bash 4 для пояснения:

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

Если в KornShell нет встроенного способа сделать это, какой наиболее лаконичный и эффективный способ написать функцию, которая это сделает?

решение1

Вот чистый способ ksh (ksh93):

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

$ cap korn
Korn

решение2

Если у вас нет ksh93, вы можете сделать это в стандартном ksh следующим образом:

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

}

${1#?}удаляет все символы, соответствующие "?", из начала первого аргумента. т.е. удаляет первый символ

${var%pattern}отрывается patternот конца var. Если мы используем исходное слово за вычетом первой буквы в качестве шаблона ( ${1#?}), мы получим первую букву обратно.

typeset -u делает первую букву заглавной

$ capitalize "the funky chicken"
The funky chicken

Предостережение: на самом деле это не всегда работает, поскольку после первой буквы слова могут быть специальные символы регулярного выражения, и они будут интерпретироваться как таковые ${var%pattern}. Например:

$ capitalize a*
A**

решение3

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

Связанный контент