testen ob strings enthalten sind

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Ozelot
Beiträge: 1515
Registriert: 18.11.2007 09:52:58

testen ob strings enthalten sind

Beitrag von Ozelot » 06.11.2010 20:21:26

Sorry, aber ich finde heute nicht das Richtige beim Suchen:

Eigentlich will ich nur wissen, wie man in der bash am elegantesten testet ob eine Variable Strings enthält oder nur Ziffern.

Benutzeravatar
JaKlaRo
Beiträge: 121
Registriert: 06.03.2008 15:00:00
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: testen ob strings enthalten sind

Beitrag von JaKlaRo » 06.11.2010 23:04:07

Hallo,
um zu testen, ob "var" nur Ziffern enthält:

Code: Alles auswählen

var1=${var##*[^0-9]*}
if [ -z "$var1" ]; then
    echo 'var ist ein String.'
else
    echo 'var enthält nur Ziffern.'
MfG
JaKlaRo

Ozelot
Beiträge: 1515
Registriert: 18.11.2007 09:52:58

Re: testen ob strings enthalten sind

Beitrag von Ozelot » 07.11.2010 00:56:15

Super, Danke! Kannst Du

Code: Alles auswählen

${var##*[^0-9]*}
noch ein bißchen erläutern, damit ich sowas auch selber bauen kann?

Wieso eliminiert das alle Ziffern? Was ist das Stichwort unter dem ich sowas ergoogeln kann?

dawg
Beiträge: 441
Registriert: 29.12.2008 19:59:00

Re: testen ob strings enthalten sind

Beitrag von dawg » 07.11.2010 01:17:28

Ich hätte es (vermutlich falsch) "substring substitution" genannt. "substring_removal" ? "parameter expansion"?
http://wiki.bash-hackers.org/syntax/pe? ... ng_removal
http://tldp.org/LDP/abs/html/string-manipulation.html
http://wiki.bash-hackers.org/syntax/pe? ... ng_removal
Die links sollten erstmal reichen (wie auch immer es korrekter Weise genannt wird).

## vom Anfang der Variablen besehen die grösstmögliche Trefferquote für:
* ->alles mögliche
[^0-9] ->keine Ziffern
* -> nochmal alles mögliche
entfernen.
So ungefähr. Kenne ich eigentlich nur für Pfadnamen:
dir=/usr/share/doc
echo ${dir##*/} -> ergibt doc
Vom Anfang der Variablen "dir" "alle Zeichen und /" so weit wie möglich entfernen.

Antworten