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