eine Bash-Array-Variable in einen durch „.“ getrennten String konvertieren?

eine Bash-Array-Variable in einen durch „.“ getrennten String konvertieren?

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 0Leerzeichen 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 $varund git tag $varverwendet wird IFS=.. Beachten Sie, var=$(IFS=.;…)dass der Variablenwert in der aktuellen Shell nicht geändert werden kann. Daher IFSmuss dieser unerwartete Wert früher festgelegt worden sein, wahrscheinlich während einiger Versuche und Fehler.

Wenn ich richtig liege, varenthä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 IFSwird zum Aufteilen 1.0.0in Wörter verwendet und echoerhält daher drei separate Argumente: 1, 0, 0. Und da echoseine Argumente mit einzelnen Leerzeichen dazwischen druckt, dachten Sie, der Wert von varsei 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 $IFSdass 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

verwandte Informationen