KornShellで単語を大文字で表示する方法(例:最初の文字を大文字にする)

KornShellで単語を大文字で表示する方法(例:最初の文字を大文字にする)

korn->のような単語を大文字で表示する組み込みの方法はKornShellにありますか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

関連情報