
Kein Duplikat vonFrage.
Ich versuche, ein Semvar-Muster (1.0.0) aus einem Array mit den Elementen 1,0,0 zu erstellen und ein Git-Tag zu erstellen git tag $var
.
Fehler: – Die obige Lösung funktioniert einfach nicht .
, sie wird durch ein 1 0 0
Leerzeichen getrennt.
4 13 0
fatal: too many params
Fehler mit dem Git-Tag-Befehl.
Ansatz:-
var=$( IFS=$'.'; echo "${versionArray[*]}" )
echo $var
git tag $var
Schlagen Sie bitte eine bessere Möglichkeit vor.
Antwort1
Ich vermute, dass es sich um die Shell handelt, die ausgeführt echo $var
und git tag $var
verwendet wird IFS=.
. Beachten Sie, var=$(IFS=.;…)
dass der Variablenwert in der aktuellen Shell nicht geändert werden kann. Daher IFS
muss dieser unerwartete Wert früher festgelegt worden sein, wahrscheinlich während einiger Versuche und Fehler.
Wenn ich richtig liege, var
enthält die Variable mit dem Namen den erwarteten Wert mit Punkten, z. B. 1.0.0
. Aber wenn Sie es so abrufen
echo $var
Das aktuelle IFS
wird zum Aufteilen 1.0.0
in Wörter verwendet und echo
erhält daher drei separate Argumente: 1
, 0
, 0
. Und da echo
seine Argumente mit einzelnen Leerzeichen dazwischen druckt, dachten Sie, der Wert von var
sei 1 0 0
.
Diese Linie
echo "$var"
verlässt sich nicht auf IFS
. Ich erwarte, dass es Ihnen zeigen wird 1.0.0
.
Eine allgemeine Lösung besteht darin, Variablen in doppelte Anführungszeichen zu setzen.hätte es sowieso tun sollen:
echo "$var"
git tag "$var"
Achten Sie auch auf IFS
. Jetzt sollte klar sein, echo $IFS
dass Ihnen nicht angezeigt wird, was die Variable ist; echo "$IFS"
ist besser. Darüber hinaus sind diese Methoden nützlich:
printf '%s' "$IFS" | hexdump -c
printf '%s' "$IFS" | hexdump -C
printf '%s' "$IFS" | xxd