Ich suchte SO und fand, dass es funktionieren würde, wenn man einen String in Großbuchstaben schreibt
str="Some string"
echo ${str^^}
Ich habe jedoch versucht, ein ähnliches Kommandozeilenargument zu verwenden, was zu folgendem Fehler führte
Versucht
#!/bin/bash
## Output
echo ${1^^} ## line 3: ${1^^}: bad substitution
echo {$1^^} ## No error, but output was still smaller case i.e. no effect
Wie könnten wir das machen?
bash
?Antworten:
Die von
str^^
Ihnen verwendete Syntax ist ab Bash 4.0 verfügbar. Vielleicht haben Sie eine ältere Version (oder Sie haben das Skriptsh
explizit ausgeführt):Versuche dies:
quelle
tr '[a-z]' [[A-Z]'
.tr '[a-z]' '[A-Z]'
.GNU bash, version 4.3.42(1)-release (x86_64-apple-darwin14.5.0)
und erhalte den gleichen Fehler wie OP. Ich glaube daher nicht, dass dies aufbash
4.0 und höher verfügbar ist, wie Sie sagen.Ausgabe:
quelle
/
wie intr /a-z/ /A-Z/
vor meiner edit: das funktioniert nur , weil es ersetzt/
durch ,/
ist aber nutzlos: pubs.opengroup.org/onlinepubs/9699919799/utilities/tr.html Es gibt auch die dunkler und weniger nützlich existierttr '[:lower:]' '[:upper:]'
.Seien Sie vorsichtig mit tr, es sei denn, Sie verwenden nur AZ. Bei anderen Gebietsschemata schlägt sogar '[: lower:]' '[: upper:]' fehl, nur awks toupper und bash (v4 +) funktionieren
quelle
tr '[:lower:]' '[:upper:]'
arbeitet jetzt für Ihr Beispiel auf OS X mindestens (auch mitLC_ALL=sv_SE
)Alternativ können Sie auf KSH oder zsh wechseln , die seit Jahrzehnten Fall Umwandlung Unterstützung gehabt haben (lange vor
bash
‚s${var^^}
in 4,0 hinzugefügt), wenn auch mit einer anderen Syntax:(Funktioniert auch mit
zsh
; beachten Sie, dass in pdksh / mksh nur ASCII-Buchstaben unterstützt werden).Mit
zsh
können Sie auch dasU
Parametererweiterungsflag verwenden:POSIXLY können Sie verwenden:
Es gibt auch:
In einigen Implementierungen, einschließlich GNU
tr
, funktioniert dies jedoch nur für Einzelbytezeichen (in UTF-8-Gebietsschemas nur für ASCII-Buchstaben).quelle
Wenn immer noch jemand Fehler beim Versuch
${str^^}
bekommt, können Sie versuchen,python -c
oderperl
es liegt wahrscheinlich daran, dass die Bash-Version niedriger als 4 ist.Bislang funktioniert bash 4 oder höher jedoch schnell mit der vorhandenen Lösung.
Verwendung
python -c
in BashIn ähnlicher Weise kann es auch verwendet werden, um Folgendes zu nutzen:
Verwenden
perl
quelle