如何在 KornShell 中将单词大写(即第一个字母到大写)

如何在 KornShell 中将单词大写(即第一个字母到大写)

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

相关内容