¿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 $foo
te 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 comando
str=expr
- El shell principal obtendrá el resultado como salida.
- El shell principal almacena el resultado en $var.