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