Hoi Kollegen,
ich arbeite aktuell an diversen Skripten mit Bash Completion. Das ganze klappt schon ganz gut, allerdings sind meine bisherigen "was kommt als nächstes" TAB-Vervollständigungen auf eine Datenbank basiert. Da kann ich prima mit Wildcards arbeiten. Nun suche ich aber was, wie ich das in BASH selbst umsetzen kann, ich will ja nicht jedes Mal mit einer Datenbank arbeiten müssen.
Bisheriger Ablauf: ich habe in einer Variable das Wort (ggf. Begin des Wortes) und möchte nun vervollständigen. Einfaches Beispiel:
Die Menge der zur Verfügung stehenden Wörter:
anton berta caesar antonia
jetzt gebe ich ant[tab] ein. Nun schläg mein Skript zu. Bisher waren diese Werte in einer Datenbank und ich konnte die "Vervollständigung" mittels eines einfachen
SELECT wort from bla where wort like "ant%"
durchführen. Das gab mir (in MySQL) die beiden verbliebenen "anton" und "antonia".
Jetzt will ich das ganze mit reinen Bash-Mitteln machen. Sprich ggf. am Anfang ein Array starten mittels:
myarray=(anton berta caesar antonia)
und dann irgendwie alle Teile aus dem Array mittels Schleife auslesen, die dem Pattern ant* entsprechen.
Hat da jemand ne Idee? Eine Schleife, sprich alles durchtesten? Aber wie mit der if-Verzweigung dann weiter? Wie vergleiche ich mittels if ein ant* mit "anton"?
Greetz Martin
Martin Schuchardt kruemeltee@gmx.de schrieb:
Hallo Martin!
Jetzt will ich das ganze mit reinen Bash-Mitteln machen. Sprich ggf. am Anfang ein Array starten mittels:
myarray=(anton berta caesar antonia)
und dann irgendwie alle Teile aus dem Array mittels Schleife auslesen, die dem Pattern ant* entsprechen.
Hat da jemand ne Idee? Eine Schleife, sprich alles durchtesten? Aber wie mit der if-Verzweigung dann weiter? Wie vergleiche ich mittels if ein ant* mit "anton"?
BASH ist mächtig, gar nicht zu vergleichen mit SH oder andere "einfachen" Shell... Das hat in sich schon die Möglichkeit, eine RegExp in einer "if" zu nutzen.
Siehe hier (erste zwei Ergebnisse einer Google-Suche):
http://stackoverflow.com/questions/2348379/use-regular-expression-in-if-cond... http://stackoverflow.com/questions/18709962/bash-regex-if-statement
In Prinzip du brauchst die Schleife für alle Elementen des Array und, angenommen hast du in der Variabel ${part} was gerade getippt wurde, machst du folgendes:
if [[ ${myarray[$i]} =~ ${part} ]]; then <hier was du machen musst, wenn die String gefunden wurde> fi
Grüße Luca Bertoncello (lucabert@lucabert.de)
Hoi Luca,
thx, das mit =~ wusste ich auch noch nicht. Cool
Danke Dir! Gruß Martin
Am 12.07.2016 um 21:49 schrieb Luca Bertoncello:
Martin Schuchardt kruemeltee@gmx.de schrieb:
Hallo Martin!
Jetzt will ich das ganze mit reinen Bash-Mitteln machen. Sprich ggf. am Anfang ein Array starten mittels:
myarray=(anton berta caesar antonia)
und dann irgendwie alle Teile aus dem Array mittels Schleife auslesen, die dem Pattern ant* entsprechen.
Hat da jemand ne Idee? Eine Schleife, sprich alles durchtesten? Aber wie mit der if-Verzweigung dann weiter? Wie vergleiche ich mittels if ein ant* mit "anton"?
BASH ist mächtig, gar nicht zu vergleichen mit SH oder andere "einfachen" Shell... Das hat in sich schon die Möglichkeit, eine RegExp in einer "if" zu nutzen.
Siehe hier (erste zwei Ergebnisse einer Google-Suche):
http://stackoverflow.com/questions/2348379/use-regular-expression-in-if-cond... http://stackoverflow.com/questions/18709962/bash-regex-if-statement
In Prinzip du brauchst die Schleife für alle Elementen des Array und, angenommen hast du in der Variabel ${part} was gerade getippt wurde, machst du folgendes:
if [[ ${myarray[$i]} =~ ${part} ]]; then <hier was du machen musst, wenn die String gefunden wurde> fi
Grüße Luca Bertoncello (lucabert@lucabert.de)
HA, schon gefunden ...
array=(anton berta caesar antonia); for element in ${array[@]}; do if [[ $element == "ant"* ]]; then echo $element; fi; done;
und das gibt: anton antonia
Greetz Martin
lug-dd@mailman.schlittermann.de