Eso depende mucho de la cáscara. Si solo miramos las 4 familias principales de shell (Bourne, csh, rc, fish):
Familia Bourne
Esa es la cáscara de Bourne y todas sus variantes y ksh
, bash
, ash
/ dash
, zsh
, yash
.
var=23
: esa es la sintaxis correcta de asignación de variable: una palabra que consiste en letras, dígitos o guiones bajos sin comillas seguidos de una sin comillas =
que aparece antes de un argumento de comando (aquí está solo)
var =23
, el var
comando con =23
como argumento (excepto en zsh
donde =something
es un operador especial que se expande a la ruta del something
comando. Aquí, es probable que obtenga un error, ya que 23
es poco probable que sea un nombre de comando válido).
var= 23
: una tarea var=
seguida de un nombre de comando 23
. Eso está destinado a ejecutarse 23
con var=
pasado a su entorno ( var
variable de entorno con un valor vacío).
var = 23
, var
comando con =
y 23
como argumento. Prueba con, echo = 23
por ejemplo.
Familia csh
csh
y tcsh
. Hay asignaciones variables con la set var = value
sintaxis para variables escalares, set var = (a b)
para matrices, setenv var value
para variables de entorno, @ var=1+1
para asignación y evaluación aritmética.
Entonces:
var=23
solo invoca el var=23
comando.
var =23
invoca el var
comando con =23
como argumento.
var= 23
invoca el var=
comando con 23
como argumento
var = 23
invoca el var
comando con =
y 23
como argumentos.
Familia rc
Eso es rc
, es
y akanga
. En esos shells, las variables son matrices y las asignaciones son con var = (foo bar)
, var = foo
siendo short para var = (foo)
(una matriz con un foo
elemento) y var =
short para var = ()
(matriz sin elemento, use var = ''
para una matriz con un elemento vacío).
En cualquier caso, los espacios en blanco (espacio o tabulación) alrededor =
están permitidos y son opcionales. Entonces, en esos shells, esos 4 comandos son equivalentes y equivalentes var = (23)
a asignar una matriz con un elemento 23
.
Pescado
En fish
, la sintaxis de asignación de variables es set var value1 value2
. Como en rc
, las variables son matrices.
Por lo tanto, el comportamiento sería el mismo que con csh
, excepto que fish
no le permitirá ejecutar un comando con un =
en su nombre. Si usted tiene un comando tal, es necesario invocar a través de sh
, por ejemplo: sh -c 'exec weird===cmd'
.
Entonces todo var=23
y var= 23
le dará un error, var =23
llamará al var
comando con =23
como argumento y var = 23
llamará al var
comando con =
y 23
como argumentos.