Chci dynamicky vytvořit sekvenci řetězců manipulací s polem prvků a vytvořením nějaké aritmetické procedury.
for name in FIRST SECOND THIRD FOURTH FIFTH; do
$name = $(( $6 + 1 ))
$name = "${$name}q;d"
echo "${$name}"; printf "n"
done
Výsledek přání by byl níže uvedený za $6
rovná se .
1q;d
2q;d
3q;d
4q;d
5q;d
Ale dostávám tuto chybu
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
Myslím, že je to něco jednoduchého. Kdysi to fungovalo, když jsem udělal něco jako
FIRST=$(( $6 + 1 ))
FIRST="${FIRST}q;d"
Přijatá odpověď:
Za prvé, kolem =
nesmí být žádná mezera v deklaraci proměnné v bash
.
Chcete-li získat to, co chcete, můžete použít eval
.
Například ukázkový skript, jako je ten váš:
#!/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
Tiskne:
1q;d
2q;d
3q;d
4q;d
5q;d
Použijte eval
opatrně, někteří lidé to z nějakého oprávněného důvodu nazývají zlem.
declare
taky by to fungovalo :
#!/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
také tiskne :
1q;d
2q;d
3q;d
4q;d
5q;d
Co se přesně stane, když spustím soubor v prostředí Shell?
Jak použít změny nově přidaných skupin uživatelů bez nutnosti restartu?