Isso é executado bash -c 'echo "$VARIABLE"' bash helloe configurado VARIABLEpara a string valueno ambiente desse comando. O comando, neste caso, será impresso hello value( hellovindo do primeiro argumento de linha de comando do script em linha e valuevindo da variável de ambiente).
Com set -o keyword(ou set -k) em bash(esta é uma opção de shell não padrão), a atribuição pode ocorrer em qualquer lugar na linha de comando:
$ set -k
$ bash -c 'echo "$1 $VARIABLE"' bash hello VARIABLE=value
hello value
$ bash -c 'echo "$1 $VARIABLE"' bash VARIABLE=value hello
hello value
$ bash -c 'echo "$1 $VARIABLE"' VARIABLE=value bash hello
hello value
$ bash -c VARIABLE=value 'echo "$1 $VARIABLE"' bash hello
hello value
$ bash VARIABLE=value -c 'echo "$1 $VARIABLE"' bash hello
hello value
Eu nunca vi essa opção usada "na natureza" e estou assumindo que ela é usada apenas com moderação em circunstâncias muito específicas, pois altera radicalmente a maneira como os comandos são analisados.
Normalmente, para injetar uma variável de ambiente para um comando, você coloca uma atribuição a um nome antes do comando assim:
Isso é executado
bash -c 'echo "$VARIABLE"' bash hello
e configuradoVARIABLE
para a stringvalue
no ambiente desse comando. O comando, neste caso, será impressohello value
(hello
vindo do primeiro argumento de linha de comando do script em linha evalue
vindo da variável de ambiente).Com
set -o keyword
(ouset -k
) embash
(esta é uma opção de shell não padrão), a atribuição pode ocorrer em qualquer lugar na linha de comando:Eu nunca vi essa opção usada "na natureza" e estou assumindo que ela é usada apenas com moderação em circunstâncias muito específicas, pois altera radicalmente a maneira como os comandos são analisados.
Do manual:
Com alguma experimentação:
Os argumentos var=val são parâmetros simples.
Mas com
set -o keyword
Os argumentos var=val são detectados, removidos dos parâmetros e colocados no ambiente.