¿Cuándo usamos la set -kopción en bash?
El manual de referencia de Bash dice:
Todos los argumentos en forma de declaraciones de asignación se colocan en el entorno de un comando, no solo los que preceden al nombre del comando.
Entiendo lo que hace la opción, pero no podía imaginar cuándo la necesitamos.

-knos permite ejecutar scripts de shell de 30 años sin la necesidad de refactorizarlos. Pase variables de entorno temporales utilizando la sintaxis de prefijo en su lugar:var1=x var2=y command ...Respuestas:
Básicamente, puede usarlo en cualquier momento que desee "inyectar" las variables de entorno pasadas a un script de shell (como argumentos) como si estuvieran establecidas en el entorno a través de
export, pero sin tener que tener que residir permanentemente enexportla lista antes de ejecutar comandos .NOTA: También existe la forma larga del
-kinterruptor,set -o keyword.Ejemplo
Ahora si yo
set -k:Pero si solo ejecutara el script anterior:
¿Qué hace la exportación?
Entonces, si tuviéramos que agregar
export | grep VARa nuestro script así:Y volvimos a ejecutar nuestras pruebas anteriores:
Pero sin
set -k:Entonces,
set -knos permite exportar temporalmente variables en masa.Otro ejemplo
Cuando establecemos múltiples variables, todas se exportan:
Entonces, ¿solo está inyectando todas las variables de entorno?
No
-kestá haciendo algo muy explícito aquí. Solo exporta variables que se incluyeron en la línea de comando cuando se ejecutó un comando.Ejemplo
Digamos que configuro esta variable:
Ahora cuando ejecutamos el mismo comando omitiendo
VARCMD1="hi":¿Pero por qué existe esto?
Encontré esta fuente que explica un poco sobre esta característica, titulada: "Cadenas de asignación de parámetros de palabras clave". NOTA: La URL de origen utiliza una dirección IP, por lo que no puedo vincularla directamente aquí en SE.
fuente
set -kporque han dado-o keywordademás de la-kopción. ¿Eso significa algo?set -o keywordes la forma larga deset -k. Verhelp set | grep -- '-k'../cmd.bash VARCMD=hinecesitaset -kque funcione exactamente como loVARCMD=hi ./cmd.bashhace sin elset -k. Supongo que la pregunta específica del OP se refiere a la necesidad de bash para admitir el./cmd.bash VARCMD=hiformularioCualquier uso práctico de
set -kes probable que sea solo un estilo personal. Algunos, tal vez aquellos a quienes les gustan los lenguajes de programación que ofrecen la capacidad de usar argumentos de palabras clave en llamadas a funciones, o aquellas pocas personas a las que les gusta laddsintaxis del comando, pueden preferira
La razón real por la que existe la opción en algunos shells se explica en la justificación del comando set en el estándar POSIX :
fuente