KornShell で単語を大文字にする方法 (つまり、最初の文字を大文字にする)

KornShell で単語を大文字にする方法 (つまり、最初の文字を大文字にする)

kornKornShell には、たとえば->のように単語を大文字にする組み込みの方法がありますか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

関連情報