URLs mit Sonderzeichen in einem BASH-Script lesbar halten

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Michahe
Beiträge: 93
Registriert: 21.03.2016 19:27:53
Lizenz eigener Beiträge: GNU General Public License

URLs mit Sonderzeichen in einem BASH-Script lesbar halten

Beitrag von Michahe » 17.10.2024 09:01:24

In einem BASH-Script möchte ich URLs mit Sonderzeichen ändern und z.B. per curl ausführen.
URL-Beispiel (Auszug):

Code: Alles auswählen

https://overpass-api.de/api/interpreter?data=%2F%2F%20Overpass%20f%C3%BCr%20BoundingBox%0A%0A%5Bmaxsize%3A2147483648%5D%20%20%20%2F%2F%202%20GB%20statt%20Standard%20512%20MB%0A%0A%2F%2F%5Bout%3Acsv%28%3A%3A%27user%27%2C%3A%3A%27changeset%27%2C%3A%3A%27version%27%3Btrue%3B%20%22%7C%22%29%5D%0A%2F%2F%5Bout%3Acsv%28%3A%3A%27 ...
In dieser Form ist das schwer lesbar; ändere ich in alle Sonderzeichen nach ASCII, z.B.

Code: Alles auswählen

%2F%2F%20
// 
%5B%7E%22%5Ebb%22%7E%22.%22%5D%28
[~"^bb"~"."](
funktioniert der Aufruf nicht mehr.
Dekodieren / Enkodieren ist das Stichwort; online z.B. hier. Gibt es ein Script, das ich in meinen Code einbauen kann?

Benutzeravatar
4A4B
Beiträge: 962
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: URLs mit Sonderzeichen in einem BASH-Script lesbar halten

Beitrag von 4A4B » 17.10.2024 11:51:26

und z.B. per curl ausführen
Für curl gibt es die Option --data-urlencode, zusammen mit der Option --get ließe sich der Parameter data aus deinem URL-Beispiel damit encodieren. Siehe hierzu auch die Beispiele in der Manpage von curl

Michahe
Beiträge: 93
Registriert: 21.03.2016 19:27:53
Lizenz eigener Beiträge: GNU General Public License

Re: URLs mit Sonderzeichen in einem BASH-Script lesbar halten

Beitrag von Michahe » 17.10.2024 14:09:56

Danke!
Mein curl-Befehl:

Code: Alles auswählen

curl --data-urlencode --output "~home/Ergebnis.txt" "https://....."
liefert Fehler bei "//":

Code: Alles auswählen

[maxsize:2147483648]   // 2 GB
maxsize%3A2147483648%5D%20%20%20%2F%2
und bricht ab. Warum wird der zweite / nicht encodiert?

Benutzeravatar
Meillo
Moderator
Beiträge: 9224
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: URLs mit Sonderzeichen in einem BASH-Script lesbar halten

Beitrag von Meillo » 17.10.2024 14:43:58

`--data-urlencode' muss wohl mit `--get' verwendet werden.

Soweit ich das verstehe muss du das etwa in der Art nutzen:

Code: Alles auswählen

curl --get --data-urlencode 'data=// Overpass für BoundingBox

... %5Bmaxsize%3A2147483648%5D%20%20%20%2F%2F%202%20GB%20statt%20Standard%20512%20MB%0A%0A%2F%2F%5Bout%3Acsv%28%3A%3A%27user%27%2C%3A%3A%27changeset%27%2C%3A%3A%27version%27%3Btrue%3B%20%22%7C%22%29%5D%0A%2F%2F%5Bout%3Acsv%28%3A%3A%27 ...'  https://overpass-api.de/api/interpreter
D.h. alles nach dem Fragezeichen in der URL ist der Data-Teil, den du per GET uebermittelst. Der muss hinter `--data-urlencode' stehen ... und dort kannst du dann alles %-Encoding durch literale Zeichen ersetzen. Als eigentlich Abfrage-URL verwendest du nur den vorderen Teil bis zum Fragezeichen.
Use ed once in a while!

Benutzeravatar
4A4B
Beiträge: 962
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: URLs mit Sonderzeichen in einem BASH-Script lesbar halten

Beitrag von 4A4B » 17.10.2024 14:47:51

Hinter --data-urlencode muss ja noch der Parameter folgen, der verschlüsselt werden soll, beispielsweise so:

Code: Alles auswählen

data='[maxsize:2147483648]   // 2 GB'
curl --data-urlencode data="$data" --get --output Ergebnis.txt https://overpass-api.de/api/interpreter
Ich habe das mal getestet, im Logfile des Webservers wird dann dieser Pfad abgerufen:

/?data=%5bmaxsize%3a2147483648%5d+++%2f%2f+2+GB

Edit: Meillo war da schneller mit der Erklärung :)

debra
Beiträge: 25
Registriert: 27.09.2024 03:12:18

Re: URLs mit Sonderzeichen in einem BASH-Script lesbar halten

Beitrag von debra » 17.10.2024 15:11:13

Michahe hat geschrieben: ↑ zum Beitrag ↑
17.10.2024 09:01:24
URL-Beispiel (Auszug):

Code: Alles auswählen

https://overpass-api.de/api/interpreter?data=%2F%2F%20Overpass%20f%C3%BCr%20BoundingBox%0A%0A%5Bmaxsize%3A2147483648%5D%20%20%20%2F%2F%202%20GB%20statt%20Standard%20512%20MB%0A%0A%2F%2F%5Bout%3Acsv%28%3A%3A%27user%27%2C%3A%3A%27changeset%27%2C%3A%3A%27version%27%3Btrue%3B%20%22%7C%22%29%5D%0A%2F%2F%5Bout%3Acsv%28%3A%3A%27 ...
Wäre schon interessant dein Volles Beispiel zu haben.
curl ohne Optionen convertiert dir eigentlich alles nötige in URL-Encoding, da das bei get-Requests sowieso verpflichtend ist. --data-urlencode macht deswegen wenig Sinn in Kombination mit --get.
Problema sind {}[], da curl das benutzt um mehrere Downloads zu machen. curl "https://debianforum.de/forum/viewtopic.php?p=[1373170-1373180]" lädt dir die letzten 10 Beiträge runter.
also

Code: Alles auswählen

https://debianforum.de/forum/viewtopic.php?p=1373170
https://debianforum.de/forum/viewtopic.php?p=1373171
https://debianforum.de/forum/viewtopic.php?p=1373172
https://debianforum.de/forum/viewtopic.php?p=1373173
...
Nicht die URL. -g schaltet dieses Verhalten aus. [] die Kommen in deinem Beispiel vor. Ich zweifle aber, dass das "echt" ist.
Alternativ kannst du --get --data-urlencode verwenden, dass die Daten aus dem URL Argument nimmt. Die Konversion von einem GET zu nem POST und dann wieder zurück zu nem GET umgeht die curl Funktionalität für multible URLs. Ist aber bestenfalls ein böser Hack. Die semantisch richtige Option, wenn man die Parameter nicht an der URL haben will ist --url-query. Aber defakto willst du das ja eigentlich gar nicht sondern nutzt das nur, weil du kein -g kennst.
Wenn deine Lesbaren URLs nicht funktionieren hast du entweder nicht korrekt konvertiert oder curl hat nen Bug passend zurück zu codieren. Deswegen wäre ein Beispiel in dem du zeigst, was du gemacht hast nötig.
Zuletzt geändert von debra am 17.10.2024 15:28:56, insgesamt 1-mal geändert.

Benutzeravatar
Meillo
Moderator
Beiträge: 9224
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: URLs mit Sonderzeichen in einem BASH-Script lesbar halten

Beitrag von Meillo » 17.10.2024 15:20:20

debra hat geschrieben: ↑ zum Beitrag ↑
17.10.2024 15:11:13
--data-urlencode macht deswegen absolut keinen Sinn in Kombination mit --get.

[...]

Alternativ kannst du --get verwenden, dass die Daten aus dem URL Argument nimmt.
Bist du sicher? Ich kenne mich mit curl nicht so gut aus, aber fuer mich hat sich das in der Manpage so gelesen, dass der Inhalt von --data bzw. --data-urlencode bei der Verwendung von --get and die URL angehaengt und damit als HTTP GET uebermittelt wird, anstatt als HTTP POST.

Mit --get die Daten aus em URL-Argument zu entnehmen erschliesst sich mir nicht, da sie bei HTTP GET doch genau dort uebertragen werden. Aber vielleicht uebersehe ich noch etwas oder habe dich falsch verstanden.
Use ed once in a while!

debra
Beiträge: 25
Registriert: 27.09.2024 03:12:18

Re: URLs mit Sonderzeichen in einem BASH-Script lesbar halten

Beitrag von debra » 17.10.2024 15:39:03

Meillo hat geschrieben: ↑ zum Beitrag ↑
17.10.2024 15:20:20
Bist du sicher? Ich kenne mich mit curl nicht so gut aus, aber fuer mich hat sich das in der Manpage so gelesen, dass der Inhalt von --data bzw. --data-urlencode bei der Verwendung von --get and die URL angehaengt und damit als HTTP GET uebermittelt wird, anstatt als HTTP POST.

Mit --get die Daten aus em URL-Argument zu entnehmen erschliesst sich mir nicht, da sie bei HTTP GET doch genau dort uebertragen werden. Aber vielleicht uebersehe ich noch etwas oder habe dich falsch verstanden.
Ich habe das nochmal genauer spezifiziert. Du hast das schon korrekt verstanden. Es macht IMHO nur semantisch keinen Sinn. Es gibt --url-query für GET-Argumente (das passend standardkonform urlencoded) und --data für POST-Argumente. Dann --data-urlencode für POST requests die trotzdem URL-encoded werden sollen und --url-query + für GET-Argumente, die das entgegen dem Standard nicht sollen. Jetzt zuerst --data-urlencode und dann --get mag das selbe machen indem man zuerst den POST-Request wie einen GET Request encoded und in dann in einen GET Request umwandelt. Aber Sinn macht es IMHO eher nicht.
Zumal wie zuvor angemerkt auch einfach -g verwendet werden kann, die das extrem lästige []-Verhalten abschaltet. Wenigstens in IPs haben sie es jetzt abgeschaltet. nein http://[1::5]/testsite.html heißt nicht, dass ich jetzt donwloads von 5 verschiedenen Servern machen will...

Benutzeravatar
4A4B
Beiträge: 962
Registriert: 09.11.2011 11:19:55
Kontaktdaten:

Re: URLs mit Sonderzeichen in einem BASH-Script lesbar halten

Beitrag von 4A4B » 17.10.2024 18:14:31

OK, mit der Option --url-query ist der Aufruf semantisch passender und tut auch das gleiche wie in meinem obigen Beispiel-Code:

Code: Alles auswählen

data='[maxsize:2147483648]   // 2 GB'
curl --url-query data="$data" https://example.com/
Request URI im Logfile des Webservers: /?data=%5bmaxsize%3a2147483648%5d+++%2f%2f+2+GB

-g bzw. --globoff scheint hier allerdings nicht auszureichen:

Code: Alles auswählen

data='[maxsize:2147483648]   // 2 GB'
curl --globoff https://example.com/?data="$data"
Da erhalte ich diese Fehlermeldung:
curl: (3) URL using bad/illegal format or missing URL
... oder liegt hier noch ein Anwendungsfehler meinerseits vor?

Michahe
Beiträge: 93
Registriert: 21.03.2016 19:27:53
Lizenz eigener Beiträge: GNU General Public License

Re: URLs mit Sonderzeichen in einem BASH-Script lesbar halten

Beitrag von Michahe » 17.10.2024 18:53:10

Danke für die zahlreichen Beiträge, ich verstehe nur teilweise ...
Jetzt habe ich meinen curl Befehl so verändert

Code: Alles auswählen

curl --url-query data="$OverpassString" --get --output "/mnt/Daten/Overpass.txt" https://overpass-api.de/api/interpreter
und die in $OverpassString vorkommenden Anführungszeichen " durch \" erweitert.
Der Overpass-Aufruf wird gestartet aber nicht beendet; in die Overpass.txt wird geschrieben:

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8" lang="en"/>
  <title>OSM3S Response</title>
</head>
<body>

<p>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</p>
<p><strong style="color:#FF0000">Error</strong>: line 1: parse error: Unknown type &quot;https&quot; </p>
<p><strong style="color:#FF0000">Error</strong>: line 1: parse error: An empty query is not allowed </p>
<p><strong style="color:#FF0000">Error</strong>: line 1: parse error: ';' expected - ':' found. </p>
<p><strong style="color:#FF0000">Error</strong>: line 9: parse error: Unknown type &quot;true&quot; </p>
<p><strong style="color:#FF0000">Error</strong>: line 9: parse error: An empty query is not allowed </p>
<p><strong style="color:#FF0000">Error</strong>: line 9: parse error: Unknown type &quot;&quot;|&quot;&quot; </p>
<p><strong style="color:#FF0000">Error</strong>: line 9: parse error: An empty query is not allowed </p>
<p><strong style="color:#FF0000">Error</strong>: line 9: parse error: ';' expected - ')' found. </p>
<p><strong style="color:#FF0000">Error</strong>: line 29: parse error: Key expected - '%' found. </p>
<p><strong style="color:#FF0000">Error</strong>: line 29: parse error: '!', '~', '=', '!=', or ']'  expected - '%' found. </p>
<p><strong style="color:#FF0000">Error</strong>: line 29: parse error: Value expected - '%' found. </p>
<p><strong style="color:#FF0000">Error</strong>: line 29: parse error: ',' or ']' expected - '%' found. </p>
<p><strong style="color:#FF0000">Error</strong>: line 29: static error: For the attribute &quot;k&quot; of the element &quot;has-kv&quot; the only allowed values are non-empty strings. </p>
<p><strong style="color:#FF0000">Error</strong>: line 31: parse error: Unexpected end of input. </p>
<p><strong style="color:#FF0000">Error</strong>: line 29: static error: Element &quot;print&quot; cannot be subelement of element &quot;union&quot;. </p>

</body>
</html>
Könnt Ihr damit etwas anfangen?
Zuletzt geändert von Michahe am 17.10.2024 21:02:30, insgesamt 1-mal geändert.

Benutzeravatar
Meillo
Moderator
Beiträge: 9224
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: URLs mit Sonderzeichen in einem BASH-Script lesbar halten

Beitrag von Meillo » 17.10.2024 19:18:29

Michahe hat geschrieben: ↑ zum Beitrag ↑
17.10.2024 18:53:10
Könnt Ihr damit etwas anfangen?
Es waere leichter fuer uns wenn du uns den kompletten Befehl inklusive Variableninhalt gibst, so dass wir ihn genau so bei uns ins Terminal kopieren und das Problem bei uns selbst reproduzieren koennen.
Use ed once in a while!

Michahe
Beiträge: 93
Registriert: 21.03.2016 19:27:53
Lizenz eigener Beiträge: GNU General Public License

Re: URLs mit Sonderzeichen in einem BASH-Script lesbar halten

Beitrag von Michahe » 18.10.2024 13:54:39

Meillo hat geschrieben: ↑ zum Beitrag ↑
17.10.2024 19:18:29
Es waere leichter fuer uns wenn du uns den kompletten Befehl inklusive Variableninhalt gibst ...
Hier ist die Overpass-Abfrage (aktualisiert und "aufgeräumt"). Bei Bedarf "Ausführen" klicken, um die Datenliste zu sehen; die schaut auszugweise o aus:

Code: Alles auswählen

@user|@uid|@timestamp|@changeset|@version
mya9999|600261|2015-01-27T13:56:59Z|28442739|1
mya9999|600261|2015-01-27T13:56:59Z|28442739|1
BeKri|14390|2016-04-11T09:05:05Z|38469952|1
Oberpfälzer|1244807|2017-05-23T19:34:55Z|48926468|1
...
Die URL für den CSV-Download erhält man auf der Overpass-Seite > Button "Export" > "Daten" > "Rohdaten direkt von Overpass API" (URL auslesen).
Das liefert CODE1:

Code: Alles auswählen

https://overpass-api.de/api/interpreter?data=%2F%2F%20Overpass%20f%C3%BCr%20OSM-user%20in%20Region%20%28BoundingBox%29%0A%0A%5Bout%3Acsv%28%3A%3A%27user%27%2C%3A%3A%27uid%27%2C%3A%3A%27timestamp%27%2C%3A%3A%27changeset%27%2C%3A%3A%27version%27%3Btrue%3B%20%22%7C%22%29%5D%0A%5Bmaxsize%3A2147483648%5D%20%20%20%2F%2F%202%20GB%20statt%20Standard%20512%20MB%0A%5Btimeout%3A2500%5D%3B%0A%28%0Anwr%5B~%22%5Ebuilding%22~%22.%22%5D%2849.3%2C%2012.6%2C%2049.31%2C%2012.61%29%3B%0A%29%3B%0A%2F%2F%20print%20results%0Aout%20meta%3B%20%2F%2F%20this%20will%20get%20you%20the%20metadata%0A
Mein BASH-Script holt diese Daten per curl-Befehl in lokale Dateien für unterschiedliche Keys

Code: Alles auswählen

nwr[~"^building"~"."]
und areas

Code: Alles auswählen

(49.3, 12.6, 49.31, 12.61);
Die Keys und areas sind als Variable im Script hinterlegt.
Für die URL möchte weitere Variablen mit "lesbaren" Inhalt anlegen, also statt vorstehendem Block CODE1
den folgenden Block CODE2:

Code: Alles auswählen

https://overpass-api.de/api/interpreter?data=// Overpass für OSM-user in Region (BoundingBox)

[out:csv(::'user',::'uid',::'timestamp',::'changeset',::'version';true; "|")]
[maxsize:2147483648]   // 2 GB statt Standard 512 MB
[timeout:2500];
(
nwr[~"^building"~"."](49.3, 12.6, 49.31, 12.61);
);
// print results
out meta; // this will get you the metadata
Nun mit dieser Vorlage:
4A4B hat geschrieben: ↑ zum Beitrag ↑
17.10.2024 18:14:31
OK, mit der Option --url-query ist der Aufruf semantisch passender und tut auch das gleiche wie in meinem obigen Beispiel-Code:

Code: Alles auswählen

data='[maxsize:2147483648]   // 2 GB'
curl --url-query data="$data" https://example.com/

Code: Alles auswählen

OverpassString="https://overpass-api.de/api/interpreter?data=// Overpass für OSM-user in Region (BoundingBox)

[out:csv(::'user',::'uid',::'timestamp',::'changeset',::'version';true; "|")]
[maxsize:2147483648]   // 2 GB statt Standard 512 MB
[timeout:2500];
(
nwr[~"^building"~"."](49.3, 12.6, 49.31, 12.61);
);
// print results
out meta; // this will get you the metadata"
curl --url-query data="$OverpassString" --get --output "/mnt/Daten/Overpass.txt" https://overpass-api.de/api/interpreter
und ich erhalte wieder das hier beschriebene (Nicht-)Ergebnis) ...

Benutzeravatar
Meillo
Moderator
Beiträge: 9224
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: URLs mit Sonderzeichen in einem BASH-Script lesbar halten

Beitrag von Meillo » 18.10.2024 16:04:37

Michahe hat geschrieben: ↑ zum Beitrag ↑
18.10.2024 13:54:39

Code: Alles auswählen

OverpassString="https://overpass-api.de/api/interpreter?data=// Overpass für OSM-user in Region (BoundingBox)

[out:csv(::'user',::'uid',::'timestamp',::'changeset',::'version';true; "|")]
[maxsize:2147483648]   // 2 GB statt Standard 512 MB
[timeout:2500];
(
nwr[~"^building"~"."](49.3, 12.6, 49.31, 12.61);
);
// print results
out meta; // this will get you the metadata"
curl --url-query data="$OverpassString" --get --output "/mnt/Daten/Overpass.txt" https://overpass-api.de/api/interpreter
Danke. Kaum kann man sich das komplett anschauen und selber ausprobieren, wird die Sache auch schon klar. ;-)

Es gab zwei Probleme:

1) Escaping in der Shell: Es waren Double-Quotes ``innerhalb'' von Double-Quotes. Dein Overpass-String darf nur die andere Art von Quotes enthalten, in die er nicht eingefasst ist. D.h. ich habe die Double-Quotes im Query-String durch Single-Quotes ersetzt.

2) So wie du den Curl-Befehl geschrieben hast, darf die Variable OverpassString nur die Overpass-Abfrage selbst enthalten, nicht aber noch URL-Bestandteile. Die habe ich entfernt.

Anschliessend war die Abfrage erfolgreich:

Code: Alles auswählen

#!/bin/sh

OverpassString="
// Overpass für OSM-user in Region (BoundingBox)
[out:csv(::'user',::'uid',::'timestamp',::'changeset',::'version';true; '|')]
[maxsize:2147483648]   // 2 GB statt Standard 512 MB
[timeout:2500];
(
nwr[~'^building'~'.'](49.3, 12.6, 49.31, 12.61);
);
// print results
out meta; // this will get you the metadata
"

curl --url-query data="$OverpassString" --get --output "Overpass.txt" https://overpass-api.de/api/interpreter
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 9224
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: URLs mit Sonderzeichen in einem BASH-Script lesbar halten

Beitrag von Meillo » 18.10.2024 20:16:20

Hier noch eine Variante mit Heredoc, bei der du beide Arten von Anfuehrungszeichen in der Overpass-Query verwenden kannst. Das macht es vielleicht im Alltag bequemer.

Code: Alles auswählen

#!/bin/sh

OverpassString=`cat <<!
// Overpass für OSM-user in Region (BoundingBox)
[out:csv(::'user',::'uid',::'timestamp',::'changeset',::'version';true; '|')]
[maxsize:2147483648]   // 2 GB statt Standard 512 MB
[timeout:2500];
(
nwr[~"^building"~"."](49.3, 12.6, 49.31, 12.61);
);
// print results
out meta; // this will get you the metadata
!
`

curl --url-query data="$OverpassString" --get --output "Overpass.txt" https://overpass-api.de/api/interpreter
Deine Query muss zwischen die Zeilen mit den Ausrufezeichen.
Use ed once in a while!

Michahe
Beiträge: 93
Registriert: 21.03.2016 19:27:53
Lizenz eigener Beiträge: GNU General Public License

Re: URLs mit Sonderzeichen in einem BASH-Script lesbar halten

Beitrag von Michahe » 19.10.2024 15:21:53

Danke!
Meillo hat geschrieben: ↑ zum Beitrag ↑
18.10.2024 16:04:37
Es gab zwei Probleme:
1) Escaping in der Shell: Es waren Double-Quotes ``innerhalb'' von Double-Quotes. Dein Overpass-String darf nur die andere Art von Quotes enthalten, in die er nicht eingefasst ist. D.h. ich habe die Double-Quotes im Query-String durch Single-Quotes ersetzt.
2) So wie du den Curl-Befehl geschrieben hast, darf die Variable OverpassString nur die Overpass-Abfrage selbst enthalten, nicht aber noch URL-Bestandteile. Die habe ich entfernt.
Beide Lösungen funktionieren perfekt, auch in meiner (umfangreicheren) Anwendung.
Ganz besonders dankbar bin ich für Deine gut nachvollziehbaren Erklarungen!

Benutzeravatar
Meillo
Moderator
Beiträge: 9224
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: URLs mit Sonderzeichen in einem BASH-Script lesbar halten

Beitrag von Meillo » 19.10.2024 19:14:09

Michahe hat geschrieben: ↑ zum Beitrag ↑
19.10.2024 15:21:53
Beide Lösungen funktionieren perfekt, auch in meiner (umfangreicheren) Anwendung.
Ganz besonders dankbar bin ich für Deine gut nachvollziehbaren Erklarungen!
Das freut mich. :-) Toll, dass es jetzt klappt.

Hier hat sich wieder gezeigt, wie wichtig es ist, dass die Hilfeleistenden den problematischen Code selbst ausfuehren und das Problem reproduzieren koennen. Das Problem mit den Quotes habe ich erst erkannt als ich die Fehlermeldungen in der Shell gesehen habe.
Use ed once in a while!

Antworten