Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Ubuntu-Forum & Kubuntu-Forum | www.Ubuntu-Forum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

cc325

User

  • »cc325« ist der Autor dieses Themas

Beiträge: 35

Registrierungsdatum: 02.05.2012

  • Nachricht senden

1

06.07.2016, 22:10

bash Funktion und "&" als Parameter

Hallo,

ich stehe gerade an einem Problem, wenn meine Funktion einen String als Parameter übergeben bekommt und dieser ein & enthält, wird dieser nicht als String interpretiert.

Als Beispiel:

Quellcode

1
2
3
function testfunction(){
        echo "${@}"
}



Zitat

testfunction string1 string2
string1 string2

testfunction string1 & string2
[1] 6205
string1
Der Befehl »string2« wurde nicht gefunden, meinten Sie vielleicht:
Befehl »strings« aus dem Paket »binutils« (main)
Befehl »strings« aus dem Paket »binutils-multiarch« (main)
string2: Befehl nicht gefunden.
[1]+ Fertig testfunction string1


Natürlich geht es auch so:

Zitat

testfunction "string1 & string2"
string1 & string2


Allerdings kann ich den Input nicht verändern, die Bash funktion muss dies selber "regeln".

Ist das möglich?

Danke schonmal!

2

07.07.2016, 11:23

Es sind eher die Leerzeichen, die stören, nicht der Ampersand. Eigentlich übergibts du 3 Strings, wobei das & zusätzlich interpretiert wird.

Was heißt, du kannst den Input nicht verändern? Irgendwie wird er ja dem Script übergeben und dann kannst du ihn doch manipulieren. Ob das schon bei der Annahme passiert oder in der Funktion, ist dann wurscht.
Pack ihn z.B. in eine Variable, die du dann der Funktion übergibst, ggf. in Quotes.
Beim Erstellen dieser Nachricht kamen keine Tiere zu Schaden.
me is all sausage
but don't call me Ferdl

cc325

User

  • »cc325« ist der Autor dieses Themas

Beiträge: 35

Registrierungsdatum: 02.05.2012

  • Nachricht senden

3

08.07.2016, 16:48

Die Funktion ist soll in der bash shell verfübar sein, die Strings werden nicht per Skript oder ähnlichen übergeben.

Es sollten einfach Strings geschrieben/kopiert werden können, jedes Wort oder einzelnes Zeichen wird von der Funktion verarbeitet.

Die einzige Lösung die ich kenne wäre immer "..." beim Aufruf zu verwenden, bedeutet aber jedes mal etwas mehr Aufwand beim schreiben und das nur, wenn man sollte es nicht vergessen sollte. Diese Anführungsstriche sind ja nur bei speziellen Sonderzeichen notwendig.

So versucht die Bash zusätzlich etwas zu starten, das empfinde ich sehr unschön programmiert, dachte es geht vielleicht etwas eleganter?

4

08.07.2016, 17:17

Naja, "unschön programmiert"... Die werden sich was gedacht haben.

Ich gebe zu, daß ich das wirkliche Problem (wie du richtig sagtest, das "&") falsch erkannt habe. Wenn es nur um solche Zeichen geht, musst du sie einfach nur escapen: \& funktioniert.

Ist kein riesiger Aufwand, aber vergessen sollte man es auch nicht.
Beim Erstellen dieser Nachricht kamen keine Tiere zu Schaden.
me is all sausage
but don't call me Ferdl

cc325

User

  • »cc325« ist der Autor dieses Themas

Beiträge: 35

Registrierungsdatum: 02.05.2012

  • Nachricht senden

5

09.07.2016, 12:37

Ich meinte damit meine Funktion ist nicht sehr gut Programmiert, wenn ich so etwas nicht gleich irgendwie abfangen/verhindern kann.

Wenn jetzt ausversehen nach dem & ein rm oder ähnliches kommen würde ... ;)

Also, es ist nicht möglich dies in der Funktion ab zu fangen?

6

10.07.2016, 16:03

Wenn die Funktion, so wie du sagtest, "jedes einzelne Zeichen verarbeiten" soll, wäre ein gequoteter String sicher am zuverlässigsten. Ich empfände das nicht als unsauber.
Wenn du dich dagegen darauf verlassen willst, daß ungequotete Zeichenketten inklusive Leer- und Sonderzeichen unverfälscht bei der Funktion ankommen (was ich eher nicht tun würde), dann musst du eben entsprechende Mechanismen in die Funktion einbauen. Ein "&" ohne Escape kommt jedenfalls nicht dort an, wie man sieht.

Zudem hängt es auch davon ab, unter welcher Shell das Script läuft.

Ohne genauere Kenntnis über die Details ist es aber schwierig, eine geeignete Lösung zu finden.
Beim Erstellen dieser Nachricht kamen keine Tiere zu Schaden.
me is all sausage
but don't call me Ferdl