Cela dépend beaucoup de la coque. Si nous ne regardons que les 4 principales familles de coquilles (Bourne, csh, rc, fish):
Famille Bourne
C'est le shell Bourne et toutes ses variantes et ksh
, bash
, ash
/ dash
, zsh
, yash
.
var=23
: c'est la syntaxe d'attribution de variable correcte: un mot qui se compose de lettres, de chiffres ou de soulignements non entre guillemets suivi d'un non guillemet =
qui apparaît avant un argument de commande (ici, il est seul)
var =23
, la var
commande avec =23
comme argument (sauf dans le zsh
cas où se =something
trouve un opérateur spécial qui se développe sur le chemin de la something
commande. Ici, vous obtiendrez probablement une erreur car il 23
est peu probable qu'il s'agisse d'un nom de commande valide).
var= 23
: une affectation var=
suivie d'un nom de commande 23
. Cela est censé s'exécuter 23
avec var=
passé à son environnement ( var
variable d'environnement avec une valeur vide).
var = 23
, var
commande avec =
et 23
comme argument. Essayez avec echo = 23
par exemple.
Famille Csh
csh
et tcsh
. Les affectations de variables existent avec la set var = value
syntaxe des variables scalaires, set var = (a b)
des tableaux, setenv var value
des variables d'environnement, @ var=1+1
des affectations et de l'évaluation arithmétique.
Donc:
var=23
appelle simplement la var=23
commande.
var =23
appelle la var
commande avec =23
comme argument.
var= 23
appelle la var=
commande avec 23
comme argument
var = 23
appelle la var
commande avec =
et 23
comme arguments.
Famille RC
C'est rc
, es
et akanga
. Dans ces shells, les variables sont des tableaux et les affectations sont avec var = (foo bar)
, avec var = foo
étant court pour var = (foo)
(un tableau avec un foo
élément) et var =
court pour var = ()
(tableau sans élément, utilisez var = ''
pour un tableau avec un élément vide).
Dans tous les cas, les espaces (espace ou tabulation) autour =
sont autorisés et facultatifs. Donc, dans ces shells, ces 4 commandes sont équivalentes et équivalentes var = (23)
à affecter un tableau avec un élément 23
.
Poisson
Dans fish
, la syntaxe d'affectation des variables est set var value1 value2
. Comme dans rc
, les variables sont des tableaux.
Le comportement serait donc le même qu'avec csh
, sauf que fish
cela ne vous permettra pas d'exécuter une commande avec un =
dans son nom. Si vous avez une telle commande, vous devez l' appeler via sh
par exemple: sh -c 'exec weird===cmd'
.
Donc tout var=23
et var= 23
vous donnera une erreur, var =23
appellera la var
commande avec =23
comme argument et var = 23
appellera la var
commande avec =
et 23
comme arguments.