a variável MYVARé definida como hino ambiente do echocomando. No entanto, o echocomando não usa essa variável. É o shell atual que expande o $MYVARargumento na linha de comando antes de chamarecho .
Portanto, se a MYVARvariável não existir no shell de antemão, esse comando produzirá apenas um caractere de nova linha.
Em seu último exemplo, você define a variável no shell antes de chamar echocom a expansão de $MYVARna linha de comando. Como a variável é definida como o resultado de $(pwd)nesse ponto (não precisa ser exportada), o shell substitui $MYVARpor esse valor antes de chamar echo.
A diferença entre
variable=value some-command
e
variable=value; some-command
ou o equivalente
variable=value
some-command
é que no primeiro caso, a variável é configurada para um valor no ambiente de some-command, mas não no shell atual, enquanto no segundo/terceiro caso, a variável é configurada no shell atual e, em seguida, some-commandé chamada. Se variablefor exportado adicionalmente, essa variável também estará disponível no ambiente de some-command, se ele quiser usar essa variável.
Exemplo:
$ unset -v var
Definir uma variável ao mesmo tempo que chama outro comando define essa variável no ambiente do comando, mas não no ambiente local:
$ var=1 sh -c 'printf "var is %s\n" "$var"'
var is 1
$ printf 'var is %s\n' "$var"
var is
Definir uma variável no ambiente local, mas não exportá-la, define-a apenas localmente:
$ var=1; sh -c 'printf "var is %s\n" "$var"'
var is
$ printf 'var is %s\n' "$var"
var is 1
Exportar a variável a torna disponível em processos filho:
$ export var
$ sh -c 'printf "var is %s\n" "$var"'
var is 1
No comando
a variável
MYVAR
é definida comohi
no ambiente doecho
comando. No entanto, oecho
comando não usa essa variável. É o shell atual que expande o$MYVAR
argumento na linha de comando antes de chamarecho
.Portanto, se a
MYVAR
variável não existir no shell de antemão, esse comando produzirá apenas um caractere de nova linha.Em seu último exemplo, você define a variável no shell antes de chamar
echo
com a expansão de$MYVAR
na linha de comando. Como a variável é definida como o resultado de$(pwd)
nesse ponto (não precisa ser exportada), o shell substitui$MYVAR
por esse valor antes de chamarecho
.A diferença entre
e
ou o equivalente
é que no primeiro caso, a variável é configurada para um valor no ambiente de
some-command
, mas não no shell atual, enquanto no segundo/terceiro caso, a variável é configurada no shell atual e, em seguida,some-command
é chamada. Sevariable
for exportado adicionalmente, essa variável também estará disponível no ambiente desome-command
, se ele quiser usar essa variável.Exemplo:
Definir uma variável ao mesmo tempo que chama outro comando define essa variável no ambiente do comando, mas não no ambiente local:
Definir uma variável no ambiente local, mas não exportá-la, define-a apenas localmente:
Exportar a variável a torna disponível em processos filho:
Observe que
é o mesmo que