How to capitalize+concatenate words of a string?
(first letter uppercase and all other other letters lowercase)
example:
input = "jAMeS bOnD"
output = "JamesBond"
String manipulation available in bash version 4:
${variable,,} to lowercase all letters${variable^} to uppercase first letter of each word${words[*]^} instead of ${words[@]^} to save some script linesAnd other improvements from mklement0 (see his comments):
ARRAY -> words)local to avoid impacting IFS outside the function (once is enougth)local for all other local variables ( variable can be first declared, and later assigned)ARRAY=( $LOWERCASE ) may expands globs (filename wildcards)
set -f or shopt -so noglobread -ra words <<< "$input" instead of words=( $input )capitalize_remove_spaces()
{
local words IFS
read -ra words <<< "${@,,}"
IFS=''
echo "${words[*]^}"
}
If you want to keep alphanumeric characters only, extends the IFS built-in variable just before the read -ra words operation:
capitalize_remove_punctuation()
{
local words IFS=$' \t\n-\'.,;!:*?' #Handle hyphenated names and punctuation
read -ra words <<< "${@,,}"
IFS=''
echo "${words[*]^}"
}
> 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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With