> > 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 - <fe...@f-hauri.ch> - http://www.f-hauri.ch