In meinem Skript frage ich den Benutzer nach einer Eingabe und speichere sie in einigen Variablen. Bevor Sie die Strings in den Variablen verwenden, möchte ich sie ausschneiden, wenn sie zu lang sind, und am Ende eine Ellipse einfügen. Also setze ich alle Variablen in ein Array und sende sie durch eine Schleife und eine if-Anweisung und ordne den neuen Wert der Variablen im Array neu. Ich habe viele Wege ausprobiert und keiner hat gearbeitet. Das folgende ist ein Beispiel:Array durchlaufen, der Variablen im Array einen neuen Wert zuweisen
preset1="Short string"
preset2="Not long very string"
preset3="A very long string here which we will then cut"
presets=("${preset1}" "${preset2}" "${preset3}")
for x in "${presets[@]}"; do
if [[ "${#x}" -gt 20 ]]; then
y="${x:0:20}..."
presets[$x]="$y"
fi
done
Bitte helfen Sie!
Dieses und die nächste Lösung funktioniert, aber die Variablen zB: '$ {preset3}' ändern sich nicht. Mit 'bash -x' können Sie sehen, dass die Zeichenfolge abgeschnitten und die Ellipse hinzugefügt wird, aber Sie können sehen, dass der Wert der Variablen nicht aktualisiert wird, wenn Sie dies tun:' echo $ {preset3} '. – vato
@vato Und warum genau möchten Sie das tun? Ändert die Array-Elemente nicht genug? – PesaThe
@vato Beachten Sie, dass Sie Arrays auch direkt mit 'read' verwenden können:' IFS = read -r 'array [0]' '. Sie brauchen überhaupt keine Variablen. Behalten Sie einfach das Array, wenn es für Sie bequemer ist. – PesaThe