Ich habe verschiedene Formen der folgenden in einem Bash-Skript ausprobiert:
#!/bin/bash
svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS"
Aber ich kann die Syntax nicht bekommen, um die COLUMNS
Umgebungsvariable korrekt zu erweitern .
Ich habe verschiedene Formen der folgenden ausprobiert:
svn diff $@ --diff-cmd /usr/bin/diff -x '-y -w -p -W $COLUMNS'
und
svn diff $@ --diff-cmd /usr/bin/diff -x '-y -w -p -W ${COLUMNS}'
und
eval svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W $COLUMNS"
Vorschläge?
bash
quotes
environment
Jamie
quelle
quelle
svn diff $@ --diff-cmd /usr/bin/diff -x "-y -w -p -W ""$COLUMNS"
$@
nicht zitiert verwenden, ist es genau das Gleiche wie$*
- das heißt, es wird"foo bar"
in zwei separate Argumente aufgeteilt,foo
undbar
. Wenn Sie die ursprüngliche Argumentliste so beibehalten möchten, wie sie Ihnen gegeben wurde, möchten Sie"$@"
.Antworten:
Wenn Sie sich nicht sicher sind, können Sie die Anforderung 'cols' auf dem Terminal verwenden und COLUMNS vergessen:
quelle
Nur eine kurze Notiz / Zusammenfassung für alle, die über Google hierher gekommen sind und nach der Antwort auf die im Titel gestellte allgemeine Frage gesucht haben (so wie ich). Eine der folgenden Optionen sollte funktionieren, um Zugriff auf Shell-Variablen in Anführungszeichen zu erhalten:
Die Verwendung von einfachen Anführungszeichen ist das Hauptproblem. Gemäß dem Bash-Referenzhandbuch :
In dem in der Frage gestellten speziellen Fall ist $ COLUMNS eine spezielle Variable mit nicht standardmäßigen Eigenschaften (siehe Antwort von lhunath oben).
quelle
'before'"$variable"'after'
(wie in dieser Antwort angegeben: stackoverflow.com/a/13802438/2254346 )Beachten Sie, dass
COLUMNS
:SIGWINCH
Signals automatisch eingestellt .Dieser zweite Punkt bedeutet normalerweise, dass Ihre
COLUMNS
Variable nur in Ihrer interaktiven Shell festgelegt wird, nicht in einem Bash-Skript.Wenn Ihr Skript
stdin
mit Ihrem Terminal verbunden ist, können Sie die Breite Ihres Terminals manuell nachschlagen, indem Sie Ihr Terminal fragen:Und um dies in Ihrem SVN-Befehl zu verwenden:
(Hinweis: Sie sollten zitieren
"$@"
und sich fernhalteneval
;-))quelle
Das folgende Skript funktioniert für mich für mehrere Werte von
$COLUMNS
. Ich frage mich, ob Sie nichtCOLUMNS
vor diesem Anruf einstellen ?Können Sie
$COLUMNS
in Ihrem Skript nachsehen, ob es richtig eingestellt ist?quelle
$@
- das teilt einen einzelnen Parameter"two words"
in zwei separate Parameter auf,two
undwords
. Sollte sein"$@"
, die Argumentliste genau so durchzuleiten, wie sie angegeben wurde.Du machst es richtig, also denke ich, dass etwas anderes schuld ist (keine SPALTEN exportieren?).
Ein Trick, um diese Fälle zu debuggen, besteht darin, einen speziellen Befehl zu erstellen (ein Abschluss für Programmiersprachen-Leute). Erstellen Sie ein Shell-Skript mit dem Namen diff-column.
und einfach benutzen
Auf diese Weise ist Ihr Code übersichtlicher zu lesen und modularer (Top-Down-Ansatz), und Sie können den Diff-Spalten-Code gründlich separat testen (Bottom-Up-Ansatz).
quelle