>
> hobbit:~$ var='garçon'
> hobbit:~$ echo "${var^^}"
> GARÇON
>
But, UTF-8 is a kind of nightmare:
var1=$'gar\303\247on'
var2=$'garc\314\247on'
printf '%q\n' "$var1" "$var2"
garçon
garçon
(nfd vs nfc) https://en.wikipedia.org/wiki/Unicode_equivalence
Trying to upper all letter from A to F:
printf '%s\n' "${var1^^[a-f]}" "${var2^^[a-f]}"
gArçon
gArÇon
You have to do something counterintuitive like:
printf '%s\n' "${var1^^[^g-z]}" "${var2^^[^g-z]}"
gArÇon
gArÇon
If you want to upper 1st alphanumeric character, you could
build a little function (using `shopt -s extglob`), like:
up1stAlpha() {
local tmp; local -n var=$1
printf -v tmp '\%o' {32..64} {91..96} {123..127}
printf -v tmp '%b' "$tmp"
tmp=${var/#*([$tmp])}
var=${var%$tmp}${tmp^}
}
This could upgrade both:
var1=$'./1234/\303\247a marche.'
var2=$'./1234/c\314\247a marche.'
up1stAlpha var1
up1stAlpha var2
printf '%s\n' "$var1" "$var2"
./1234/Ça marche.
./1234/Ça marche.
So you could obtain two different entries with same name, in same directory:
mkdir -p "${var1}" "${var2}"
ls -dig 1234/*
1572965 drwxr-xr-x 2 user 4096 18 jan 12:13 '1234/Ça marche.'
1572964 drwxr-xr-x 2 user 4096 18 jan 12:13 '1234/Ça marche.'
--
Félix Hauri - <[email protected]> - http://www.f-hauri.ch