%20%D0%B2%20KornShell.png)
Есть ли встроенный способ в 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