¿Cuál es la diferencia entre las asignaciones de variables a continuación?
var=23
var =23
var= 23
var = 23¿Hay alguna diferencia en el espacio alrededor del operador de asignación?
                    
                        shell
                                variable
                                assignment
                                
                    
                    
                        ajay
fuente
                
                fuente

varentoncesvar =23sería pase=23a var, yvar = 23pasaría=y23que var. O, si usted tiene un comando llamadovar=entoncesvar= 23pasaría23al comandovar=.bash, que hace exactamente lo mismo queshen los cuatro casos.Respuestas:
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, elvarcomando con=23como argumento (excepto enzshdonde=somethinges un operador especial que se expande a la ruta delsomethingcomando. Aquí, es probable que obtenga un error, ya que23es poco probable que sea un nombre de comando válido).var= 23: una tareavar=seguida de un nombre de comando23. Eso está destinado a ejecutarse23convar=pasado a su entorno (varvariable de entorno con un valor vacío).var = 23,varcomando con=y23como argumento. Prueba con,echo = 23por ejemplo.Familia csh
cshytcsh. Hay asignaciones variables con laset var = valuesintaxis para variables escalares,set var = (a b)para matrices,setenv var valuepara variables de entorno,@ var=1+1para asignación y evaluación aritmética.Entonces:
var=23solo invoca elvar=23comando.var =23invoca elvarcomando con=23como argumento.var= 23invoca elvar=comando con23como argumentovar = 23invoca elvarcomando con=y23como argumentos.Familia rc
Eso es
rc,esyakanga. En esos shells, las variables son matrices y las asignaciones son convar = (foo bar),var = foosiendo short paravar = (foo)(una matriz con unfooelemento) yvar =short paravar = ()(matriz sin elemento, usevar = ''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 equivalentesvar = (23)a asignar una matriz con un elemento23.Pescado
En
fish, la sintaxis de asignación de variables esset var value1 value2. Como enrc, las variables son matrices.Por lo tanto, el comportamiento sería el mismo que con
csh, excepto quefishno le permitirá ejecutar un comando con un=en su nombre. Si usted tiene un comando tal, es necesario invocar a través desh, por ejemplo:sh -c 'exec weird===cmd'.Entonces todo
var=23yvar= 23le dará un error,var =23llamará alvarcomando con=23como argumento yvar = 23llamará alvarcomando con=y23como argumentos.fuente
var=23asigna 23 a la variablevar.var =23intenta ejecutar el comando (o alias o función)varcon argumento=23var = 23lo mismo, pero los argumentos=y23var= 23establecevarla variable de entorno en una cadena en blanco, luego ejecuta el comando23Sí, Shell es extraño como lenguaje de programación. Pero tiene mucho sentido como un shell para uso interactivo, donde los espacios separan comandos y argumentos. La mayoría de los "caracteres especiales" (
=en este caso) tienen un significado especial solo en posiciones particulares, para permitir argumentos casi arbitrarios a los comandos. Vea las interpretaciones anteriores.fuente
var=23es la sintaxis correcta para asignar valor a una variable.var =23se considera como comandovarcon=23opción / argumento para comandovar(aunque la sintaxis correcta / estándar para argumento / opción es-optiono--option)var= 23no asignará nadavarya que el espacio en blanco interrumpe el proceso de asignación y23se considerará como otro comando. La solución alternativa esvar=\ 23ovar=' 23'para almacenar espacios en blanco.var = 23tiene un efecto similar al discutido en el 2º caso.En realidad, este tipo de uso del espacio alrededor
=generalmente se usa en condiciones de prueba en el interior[[ ]]. Ejemplo para Bash:Y después de todo, el comportamiento del espacio en blanco alrededor
=depende de su shell y los lenguajes de programación.fuente