Wie bekomme ich das erste Zeichen der Variablen?

8

Ich versuche, das erste Zeichen einer Variablen zu erhalten, aber ich erhalte einen fehlerhaften Ersetzungsfehler. Kann mir jemand helfen, es zu reparieren?

code ist:

%Vor%

Tue ich etwas falsch oder gibt es einen besseren Weg, dies zu tun?

- BEARBEITEN -

Wie gewünscht - hier ist eine Beispieleingabe, die in /some/file.txt

gespeichert ist %Vor%     
Martyn 18.07.2013, 12:43
quelle

4 Antworten

12

Um das erste Zeichen einer Variablen zu erhalten, müssen Sie sagen:

%Vor%

Ihr Code weist jedoch einen Syntaxfehler auf:

%Vor%

Also kann das den Trick machen:

%Vor%

Es kann auch so gemacht werden:

%Vor%

Aktualisieren

Basierend auf Ihrem Update funktioniert das für mich:

%Vor%     
fedorqui 18.07.2013, 12:44
quelle
4

Das Hinzufügen des fehlenden Speicherplatzes (wie in fedorquis Antwort ;) vorgeschlagen) funktioniert für mich.

Eine alternative Methode / Syntax

Das würde ich in Bash machen, wenn ich das erste Zeichen einer Zeichenkette überprüfen möchte

%Vor%

Auf der rechten Seite von == wird der zitierte Teil buchstäblich behandelt, während * ein Platzhalter für eine beliebige Zeichenfolge ist.

Weitere Informationen finden Sie im letzten Teil von Conditional Constructs von Bash Referenzhandbuch:

  

Wenn die Operatoren '==' und '! =' verwendet werden, wird die Zeichenfolge rechts vom Operator als Muster betrachtet und gemäß den unten in Musterabgleich

Überprüfen Sie, ob Sie die richtige Shell verwenden

Wenn Sie Fehler wie " Falscher Substitutionsfehler " und " [[: nicht gefunden " erhalten (siehe Kommentar ) obwohl Ihre Syntax ist in Ordnung (und funktioniert gut für andere), könnte es bedeuten, dass Sie benutzen die falsche Shell (also nicht Bash).

Um sicherzustellen, dass Sie Bash verwenden, um das Skript auszuführen,

  • macht das Skript ausführbar und verwendet einen geeigneten Shebang, z. %Code%
  • oder führen Sie es über #!/bin/bash aus

Beachten Sie auch, dass sh nicht unbedingt bash ist, manchmal strich (z. B. in Ubuntu) oder einfach nur Bourne-Shell .

    
doubleDown 18.07.2013 13:20
quelle
2

Versuchen Sie Folgendes:

%Vor%

oder Sie können Folgendes für Ihre if -Syntax verwenden:

%Vor%     
jaypal singh 18.07.2013 12:57
quelle
0

TIMTOWTDI ^^

%Vor%

Hinweis: Ich habe das Eval weggelassen, was in einigen (seltenen!) Fällen erforderlich sein könnte (und in der Regel gefährlich ist).

Anmerkung2: Ich fügte eine "sicherere" IFS & amp; Lesen Sie (-r, roh), aber Sie können zu Ihrem eigenen zurückkehren, wenn es besser geeignet ist. Beachten Sie, dass es immer noch Zeile für Zeile liest.

Anmerkung3: Ich habe mir angewöhnt, immer $ {var} anstelle von $ var zu verwenden ... funktioniert für mich (einfach, um Vars in komplexem Text zu finden, und einfach zu sehen, wo sie zu allen Zeiten beginnen und enden) hier nicht nötig.

Hinweis4: Sie können den Test auch in *"#"*) ändern, wenn einige der (Kommentare?) Zeilen Leerzeichen oder Tabulatoren vor dem '#' haben dürfen (und keine der Symlink-Zeilen enthält ein '#')

    
Olivier Dulac 09.02.2018 16:58
quelle

Tags und Links