Ich möchte eine Folge von Zeichenfolgen dynamisch erstellen, indem ich ein Array von Elementen manipuliere und eine arithmetische Prozedur erstelle.
for name in FIRST SECOND THIRD FOURTH FIFTH; do
$name = $(( $6 + 1 ))
$name = "${$name}q;d"
echo "${$name}"; printf "n"
done
Das gewünschte Ergebnis wäre das Folgende für $6
ist gleich .
1q;d
2q;d
3q;d
4q;d
5q;d
Aber ich bekomme diesen Fehler
reel_first_part.sh: line 18: FIRST: command not found
reel_first_part.sh: line 19: ${$name}q;d: bad substitution
reel_first_part.sh: line 18: FIRST: command not found
reel_first_part.sh: line 19: ${$name}q;d: bad substitution
reel_first_part.sh: line 18: FIRST: command not found
reel_first_part.sh: line 19: ${$name}q;d: bad substitution
Ich denke, es ist etwas Einfaches. Früher hat es funktioniert, als ich so etwas gemacht habe
FIRST=$(( $6 + 1 ))
FIRST="${FIRST}q;d"
Akzeptierte Antwort:
Zunächst einmal darf um =
kein Leerzeichen stehen in der Variablendeklaration in bash
.
Um zu bekommen, was Sie wollen, können Sie eval
verwenden .
Zum Beispiel ein Beispielskript wie Ihres:
#!/bin/bash
i=0
for name in FIRST SECOND THIRD FOURTH FIFTH; do
eval "$name"="'$(( $i + 1 ))q;d'"
printf '%sn' "${!name}"
i=$(( $i + 1 ))
done
Drucke :
1q;d
2q;d
3q;d
4q;d
5q;d
Verwenden Sie eval
vorsichtig, manche Leute nennen es aus triftigen Gründen böse.
declare
würde auch funktionieren :
#!/bin/bash
i=0
for name in FIRST SECOND THIRD FOURTH FIFTH; do
declare "$name"="$(( $i + 1 ))q;d"
printf '%sn' "${!name}"
i=$(( $i + 1 ))
done
druckt auch :
1q;d
2q;d
3q;d
4q;d
5q;d