Erstes Zeichen einer Variablen in einem shell-Skript in Großbuchstaben?
Ich habe ein shell-script gestartet wird, dass unit-tests für Module. Ich brauche den Namen des Moduls, in der alle Kleinbuchstaben und mit dem ersten Zeichen in Großbuchstaben. So weit ich mache es so:
#!/bin/sh -x
# z.B. getbrowser
strModuleToTest=$1
# g
strModuleToTestUppercaseFirstletter=${strModuleToTest:0:1}
# etbrowser
strModuleToTestUppercaseLastletters=${strModuleToTest:1}
# g -> G
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/a/A}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/b/B}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/c/C}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/d/D}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/e/E}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/f/F}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/g/G}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/h/H}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/i/I}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/j/J}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/k/K}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/l/L}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/m/M}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/n/N}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/o/O}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/p/P}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/q/Q}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/r/R}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/s/S}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/t/T}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/u/U}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/v/V}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/w/W}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/x/X}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/y/Y}"
strModuleToTestUppercaseFirstletter="${strModuleToTestUppercaseFirstletter/z/Z}"
# Getbrowser
strModuleToTestUppercase=$strModuleToTestUppercaseFirstletter""$strModuleToTestUppercaseLastletters
Was wäre ein einfacher Weg, um $strModuleToTestUppercase? Ich habe versucht,
strModuleToTestUppercase="${strModuleToTest[@]^}"
oder
strModuleToTestUppercasesed="sed 's/\<./\u&/g' $strModuleToTest"
aber ohne Erfolg.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn:
mit bash v4+
Diese Arbeit sollte mit ein bisschen ältere bash-Versionen (von Glenn):
mit zsh
mit Asche und coreutils
mit GNU sed
mit BSD-sed
mit awk
mit perl
mit python
mit ruby
- Ausgang in allen Fällen
"$(tr a-z A-Z <<< ${s:0:1})${s:1}"
Könnten Sie
Erklärung
\(.\)
entspricht einem einzelnen Zeichen\U\1
ersetzt das Zeichen mit einem großgeschriebenen version/g
bedeutet, dass nur die erste übereinstimmung wird verarbeitet.Ist perl ok?
perl -ne 'print ucfirst'
einfacher wäre.perl -pe '$_=ucfirst'