oli*_*bre 3 string shell lowercase capitalize capitalization
如何大写+连接字符串的单词?
(首字母大写,所有其他字母小写)
例:
input = "jAMeS bOnD"
output = "JamesBond"
bash版本4中可用的字符串操作:
${variable,,} 小写所有字母${variable^} 大写每个单词的第一个字母${words[*]^}而不是${words[@]^}保存一些脚本行mklement0的其他改进(见他的评论):
ARRAY- > words)local以避免影响IFS之外的功能(一次是enougth)local所有其他局部变量(变量可以先申报,后来分配)ARRAY=( $LOWERCASE )可以扩展globs (文件名通配符)
set -fshopt -so noglobread -ra words <<< "$input"而不是words=( $input )capitalize_remove_spaces()
{
local words IFS
read -ra words <<< "${@,,}"
IFS=''
echo "${words[*]^}"
}
Run Code Online (Sandbox Code Playgroud)
如果只想保留字母数字字符,请在操作之前扩展IFS内置变量read -ra words:
capitalize_remove_punctuation()
{
local words IFS=$' \t\n-\'.,;!:*?' #Handle hyphenated names and punctuation
read -ra words <<< "${@,,}"
IFS=''
echo "${words[*]^}"
}
Run Code Online (Sandbox Code Playgroud)
> capitalize_remove_spaces 'jAMeS bOnD'
JamesBond
> capitalize_remove_spaces 'jAMeS bOnD *'
JamesBond*
> capitalize_remove_spaces 'Jean-luc GRAND-PIERRE'
Jean-lucGrand-pierre
> capitalize_remove_punctuation 'Jean-luc GRAND-PIERRE'
JeanLucGrandPierre
> capitalize_remove_punctuation 'Jean-luc GRAND-PIERRE *'
JeanLucGrandPierre
Run Code Online (Sandbox Code Playgroud)