Quel est le problème avec ce script? J'essaie de définir A1 = 1, B1 = 1, C1 = 1
LIST="A B C"
for x in $LIST
do
"$x"1=1
done
et le résultat est:
./x.: line 7: A1=1: command not found
./x.: line 7: B1=1: command not found
./x.: line 7: C1=1: command not found
shell-script
variable
Ake Blomberg
la source
la source
eval "$x"1=1
. Bien que, comme l'a noté Jakuje, les tableaux soient probablement mieux adaptés à ce cas.Réponses:
Une affectation de variable a la forme d'un nom de variable, suivi du signe égal, suivi de la valeur (facultative).
Ceci est une mission valide:
"$x"1=1
n'est pas une affectation valide, car"$x"1
n'est pas un nom de variable. Il peut être eval uated à un nom de variable, mais ce n'est pas. Le shell, en fait, pense que c'est une commande.Une façon de faire ce que vous voulez réaliser est la suivante:
Une autre façon dans bash (mais pas dans d'autres shells) est:
Ou aussi (encore une fois bash uniquement):
(Il n'y a pas beaucoup de différence dans votre cas.)
Mais, comme Jakuje l'a noté dans les commentaires , vous voudrez probablement aller avec des tableaux, si votre shell en a (ksh, bash ou zsh).
Pour être complet:
eval
exécute des commandes arbitraires. Donc, si sur le côté droit du signe égal, vous avez une variable qui se développe en une commande, cette commande sera exécutée. Le code suivant:est équivalent à
a=hello
.declare
est un bash intégré pour assigner des variables et n'exécutera aucune commande. Le code suivant:est équivalent à
a='$(echo hello)'
.let
est similaire àdeclare
, car il n'exécute pas de commandes. Mais contrairement àdeclare
,let
peut être utilisé pour des opérations arithmétiques:est équivalent à
a=3
.la source
ABC = 123
n'est pas valide. Parce que l'espace est ajouté avant et après leequal(=)
signe.La FAQ bash a une entrée sur l'indirection. Dans la plupart des cas d'utilisation, ce que vous devez réellement faire est d'utiliser un tableau associatif ou indexé. Vous pouvez aussi utiliser
Voir cette entrée FAQ pour plus d'options pour ce faire tout en évitant les
eval
citations en désordre .la source
Vous pouvez utiliser du code comme suit. Dans votre shell de code s'exécute
"$x"1=1
comme une commande car ce n'est pas une affectation de variable valide.la source
command not found <varname>=1
lorsque j'essaie de le faire (évidemment avec <varname> étant la valeur dans laquelle je suis stockéa
)echo
ici! Justementa="$x"1
. Illet
s'agit également d' un contexte arithmétique, vous ne pouvez donc lui affecter que des numéros.declare $a=foobar
travaux.