Vous ne pouvez pas avoir des espaces autour de votre " = " signe.
Lorsque vous écrivez:
STR = "foo"
bash essaie d'exécuter une commande nommée STR avec 2 arguments (les chaînes '=' et 'foo')
Lorsque vous écrivez:
STR =foo
bash essaie d'exécuter une commande nommée STR avec 1 argument (la chaîne de caractères "=foo')
Lorsque vous écrivez:
STR= foo
bash essaie d'exécuter la commande foo avec STR ensemble de la chaîne vide dans son environnement.
Je ne sais pas si cela aide à clarifier ou si il est simple de dissimulation, mais note que:
- la première commande est exactement équivalent à:
STR "=" "foo"
,
- la deuxième est la même que
STR "=foo"
,
- et le dernier est équivalent à
STR="" foo
.
La section pertinente du sh langue spec, la section 2.9.1 états:
Un "simple commande" est une séquence de variables en option des affectations et des redirections, dans n'importe quel ordre, suivie éventuellement par des mots et des redirections, terminé par un opérateur de contrôle.
Dans ce contexte, une word
est la commande bash va exécuter. Toute chaîne de caractères contenant =
(dans une autre position qu'au début de la chaîne) qui n'est pas une redirection est une affectation de variable, tandis que toute chaîne qui n'est pas une redirection et ne contient pas d' =
est une commande. En STR = "foo"
, STR
n'est pas une affectation de variable.