![如何在 KornShell 中将单词大写(即第一个字母到大写)](https://linux22.com/image/23981/%E5%A6%82%E4%BD%95%E5%9C%A8%20KornShell%20%E4%B8%AD%E5%B0%86%E5%8D%95%E8%AF%8D%E5%A4%A7%E5%86%99%EF%BC%88%E5%8D%B3%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%AD%97%E6%AF%8D%E5%88%B0%E5%A4%A7%E5%86%99%EF%BC%89.png)
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