.png)
Gibt es in KornShell eine integrierte Möglichkeit, ein Wort groß zu schreiben, z. B. korn
-> Korn
? Ein Bash 4-Beispiel zur Verdeutlichung:
str='korn'
echo "${str^}"
Wenn es dafür in KornShell keine integrierte Möglichkeit gibt, was ist dann die prägnanteste und effizienteste Möglichkeit, eine Funktion zu schreiben, die dies erledigt?
Antwort1
Hier ist eine reine KSH-Methode (KSH93):
function cap {
typeset -u f
f=${1:0:1}
printf "%s%s\n" "$f" "${1:1}"
}
$ cap korn
Korn
Antwort2
Wenn Sie KSH93 nicht zur Verfügung haben, können Sie es in Standard-KSH wie folgt tun:
function capitalize {
typeset -u first
first=${1%"${1#?}"}
print "${first}${1#?}"
}
${1#?}
entfernt alle Zeichen, die mit "?" übereinstimmen, vom Anfang des ersten Arguments. d. h. entfernt das erste Zeichen
${var%pattern}
streift pattern
vom Ende ab var
. Wenn wir das ursprüngliche Wort minus des ersten Buchstabens als Muster ( ${1#?}
) verwenden, erhalten wir den ersten Buchstaben zurück.
typeset -u macht den ersten Buchstaben groß
$ capitalize "the funky chicken"
The funky chicken
Achtung, das funktioniert nicht immer, da nach dem ersten Buchstaben des Wortes spezielle Regex-Zeichen stehen können, die dann auch als solche interpretiert werden ${var%pattern}
. zB
$ capitalize a*
A**
Antwort3
% str='korn'
% echo ${(U)str:0:1}${str#?}
Korn