Shell-spezifisches Verhalten
Wie man mit verschiedenen Shell-Einschränkungen umgeht
Generell: Befehle mit Leerzeichen oder Sonderzeichen in Anführungszeichen setzen
Auf jeder Shell trennt ein Leerzeichen normalerweise ein Befehlszeilenargument vom vorherigen und vom nächsten.
Andere Zeichen können für bestimmte Shell-spezifische Funktionen verwendet werden.
Wenn solche Zeichen oder Leerzeichen vorkommen, ist es immer notwendig, den Befehl oder zumindest den Ausdruck, in den er eingebettet ist, in Anführungszeichen zu setzen, um "Missverständnisse" zu vermeiden.
Windows Batch-Dateien: das Codepage-Problem
So kann man vorgehen, wenn beim Aufruf von csvfox Umlaute erforderlich sind.
Die folgende Windows-Batch-Datei (etwas.bat) ist im ANSI-Format (hier: Windows-1252).
Sie benötigt das Euro-Zeichen (€), aber die Standard-Codepage 850 unterstützt dieses Zeichen nicht.
Daher wechselt die Batch-Datei vorübergehend zur Codepage 1252 und definiert die Variable "euro" (später als "%euro%"), bevor sie wieder zur Codepage 850 wechselt.
Danach ruft sie csvfox mit Befehlsparametern auf und verwendet an jeder Stelle, an der "€" erforderlich wäre, "%euro%" stattdessen.
@echo off &setlocal chcp 1252>nul set "euro=€" chcp 850>nul csvfox kfz.csv +rename[Price],[Brand]=NetPrice,CarType %[Tax]=1.19 +add[GrossPrice]=(([NetPrice])*[Tax]) +add[Phrase]="My new [CarType] costs {([GrossPrice])2} %euro%!" +add[Expensive]={(([NetPrice])*1)2} car-done.csv %log=log-%%Y.txt
Eine andere Möglichkeit, dies zu handhaben, wäre die Verwendung der Option %job, %j.
Eine %job Datei enthält alle Befehle, die sonst csvfox-Parameter wären, und hat UTF-8 oder die lokale Windows-Standardkodierung (z.B. CP1252 = Windows-1252). Wenn Sie also die Befehle dort platzieren, überwinden Sie die Einschränkungen des CP850-Befehlszeilenprozessors, Sie können Leerzeilen und Kommentare einfügen und Sie können auch die lokal unterstützten diakritischen Zeichen direkt verwenden.
Die gleiche Arbeit kann also auch mit dieser %job Datei erledigt werden:
myjobfile.txt
Außerdem kann eine %job Datei eine explizite Kodierung haben:
%job/utf-8=myjobfile.txt
Wenn Sie also mit UTF-8 arbeiten, ist es auch möglich, einen beliebigen Codepunkt des Unicode-Zeichensatzes einzubetten.
Linux bash: Expansion vermeiden
In einigen Anforderungen müssen Sonderzeichen, wie z.B. Klammern, durch das Voranstellen eines Backslashs "\" entschärft werden. Dies ist z.B. für den Zugriff auf Spaltennamen erforderlich, die selbst Klammern enthalten. Siehe auch hier: CSV Zugang zu Feldern
Aber die Linux-Bash verbraucht den Backslash für sich selbst (für ihren eigenen Bedarf an Escapings) und entfernt ihn aus dem Befehl.
Es gibt zwei verschiedene Möglichkeiten, dies zu handhaben:
- Schließen Sie den betreffenden Befehl in doppelte Anführungszeichen ein.
- Ergänzen Sie jeden Backslash mit einem zweiten Backslash, d.h. verdoppeln Sie den Backslash.
Außerdem expandiert die Linux-Shell Wildcards wie * und ? sofort als Platzhalter für Dateinamen, anstatt diese Zeichen an das aufgerufene Programm weiterzuleiten.
Sie können diese Expansion mit der Einstellung "-f" unterdrücken. Oder setzen Sie +H.
Dies kann auf diese Weise geschehen:
- set -f
csvfox input.csv (more commands)
set +f
or
setzen +H
csvfox input.csv (weitere Befehle)
setzen -H
Powershell: Vermeiden Sie die Behandlung von Sonderzeichen
Verwenden Sie "--%" als ersten Parameter für csvfox, wenn Sie die Powershell verwenden.
Dies verhindert, dass #, % usw. als Sonderfunktionen behandelt werden, und erlaubt der Shell, sie als Zeichen zu interpretieren.
Wenn Sie csvfox häufig verwenden, empfiehlt es sich, ein Befehlsskript zu erstellen, das den Parameter "--%" immer als erstes Argument einfügt.
cmd /c 'csvfox ...' ist eine Alternative zu --%.
Achten Sie bitte auf die einfachen Anführungszeichen, die die gesamte Befehlszeile umgeben müssen!
überprüfen!
@ als erstes Zeichen in at-Parameter wird leider immer noch vergessen.