ubuntuusers.de

variablenmanipulation kombinieren

Status: Gelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

frank-w

Anmeldungsdatum:
30. September 2008

Beiträge: 419

Hallo,

ich manipuliere Variablen mit den bash-Kürzeln

1
2
3
4
file=Blah.TxT
ext=${file##*.} #Dateiendung extrahieren
ext_l=${ext,,} #in kleinbuchstaben
echo ext_l

kann man das auch irgendwie kombinieren (ohne zwischenvariable)?

Gruß Frank

unmensch

Anmeldungsdatum:
29. Mai 2010

Beiträge: 170

Hi,

einen Weg, zwei verschiedene Expansion auf einmal zu nutzen, gibt es meines Wissens nicht in der Bash. Du kannst aber auf die neuen Namen verzichten:

file=Blah.TxT
file="${file##*.}"
file="${file,,}"
echo "$file" #da fehlte bei dir natürlich das $

HTH

tgsflash

Avatar von tgsflash

Anmeldungsdatum:
21. August 2010

Beiträge: 921

Wohnort: /home

Nein, weil du ja den Inhalt der Variable

File

an die Variable

ext

mit mit den Parametern weiter an die Variable

ext_l

übergibst.

Außerdem ist es besser lesbar und nachvollziehbar.

Ist diese Variante machbar? Der Schreibaufwand bleibt aber der gleiche, trotz verkürzter Zeile

1
2
3
file=Blah.TxT
ext_l=${file##*.; ext,,} #Dateiendung extrahieren, Übergabe ext an ext_l in kleinbuchstaben
echo $ext_l

edit: hmm... mir fällt gerade auf, das es so gar nicht funktionieren kann.

file

muss ja an die Variablen

ext

übergeben werden.

Logischerweise müssen die Parameter komplett an eine Variablen übergeben werden

Keine Ahnung ob diese Syntax gültig ist. Aber es ist eine Richtung wenn es doch möglich ist.

1
2
ext_l=${file##*.,,} #Dateiendung extrahieren und in kleinbuchstaben
echo $ext_l

frank-w

(Themenstarter)

Anmeldungsdatum:
30. September 2008

Beiträge: 419

1
2
3
file=Blah.TxT
ext_l=${file##*.,,} #Dateiendung extrahieren und in kleinbuchstaben
echo $ext_l

ein Syntaxfehler kommt nicht, aber es wird weder die dateiendung extrahiert noch in kleinbuchstaben umgewandelt.es wäre aber das, was ich irgendwie erreichen will.

Gruß Frank

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

frank-w schrieb:

kann man das auch irgendwie kombinieren (ohne zwischenvariable)?

Nein.

frank-w schrieb:

ext_l=${file##*.,,} #Dateiendung extrahieren und in kleinbuchstaben

ein Syntaxfehler kommt nicht, aber es wird weder die dateiendung extrahiert noch in kleinbuchstaben umgewandelt. ...

Eben.
Schau hier im Bash Manual: http://www.gnu.org/software/bash/manual/bash.html#Shell-Parameter-Expansion und hier in Greg's Wiki: http://mywiki.wooledge.org/BashFAQ/073

Es bleibt am Ende doch bei den 2 Schritten, wie Du sie oben gemacht hast. (sorry, ist so)

LG,

track

tgsflash

Avatar von tgsflash

Anmeldungsdatum:
21. August 2010

Beiträge: 921

Wohnort: /home

frank-w schrieb:

ein Syntaxfehler kommt nicht, aber es wird weder die dateiendung extrahiert noch in kleinbuchstaben umgewandelt

nun, ja, das abe ich mitbekommen nachdem ich diese fixe Idee hatte und es gleich mal selber getestet habe.

In wie weit du in Bash einen eigenen Algorithmus basteln kannst, weiß ich nicht, sofern könntest du mit Speedcoding ein paar Zeilen sparen was aber relativ ist da du die Zeile im Algorithmus definieren oder einbinden musst.

Bei dem Dreizeiler macht es eigentlich keinen großen Sinn

TausB

Avatar von TausB

Anmeldungsdatum:
26. November 2009

Beiträge: 1570

Wohnort: Terra incognita

frank-w schrieb:

ich manipuliere Variablen mit den bash-Kürzeln

1
2
3
4
file=Blah.TxT
ext=${file##*.} #Dateiendung extrahieren
ext_l=${ext,,} #in kleinbuchstaben
echo ext_l

kann man das auch irgendwie kombinieren (ohne zwischenvariable)?

Mein Vorschlag:

file=Blah.TxT
ext="${file##*.}" && ext="${ext,,}" # zumindest in einer Zeile und nur eine Variable
echo "${ext}"

"" - falls im Extension Leerzeichen sind ☺ .

TausB

Antworten |