¿Cuál es el significado de "var=${str=expr}" en el shell de Linux?

¿Cuál es el significado de "var=${str=expr}" en el shell de Linux?

¿Cuál es el significado de "var=${str=expr}" en el shell de Linux? ¿Quién puede explicármelo específicamente?

Respuesta1

Consulte "Expansión de parámetros" en man bash:

${parameter:=word} Asigne valores predeterminados. Si el parámetro no está configurado o es nulo, la expansión de la palabra se asigna al parámetro. Luego se sustituye el valor del parámetro. De esta forma no se pueden asignar parámetros posicionales ni parámetros especiales.

Los dos puntos se explican arriba:

Cuando no se realiza la expansión de subcadenas, utilizando los formularios documentados a continuación, bash prueba si un parámetro no está configurado o es nulo. Omitir los dos puntos da como resultado una prueba solo para un parámetro que no está configurado.

Evidencia:

var=${str=expr}
echo $var
echo $str

Producción:

expr
expr

Respuesta2

En bash puedes usar $( ) para iniciar una tarea en un subshell.

Ejemplo:

#!/usr/bin/env bash
foo=${ls}
echo $foo

Este script llenará la variable $foo con el resultado de ls.
(y echo $foote mostrará el contenido).


Ahora a tu pregunta más específica. Tampoco sabía el resultado, así que lo probé, suponiendo que con 'shell de Linux' te refieres a bash, que es el shell predeterminado en mis distribuciones de Linux.

Creé el siguiente archivo:

#!/usr/bin/env bash
foo=${str="test 1 2 3"}
echo $foo

y lo ejecuté:

> ./test t
test 1 2 3

Parece asignar el valor en la cadena (o en su expresión) a la variableypara devolver ese valor al script principal.


Recordar:

  • Se iniciará un nuevo shell
  • Ese nuevo shell ejecutará el comandostr=expr
  • El shell principal obtendrá el resultado como salida.
  • El shell principal almacena el resultado en $var.

información relacionada