passando variáveis env para comandos no bash [duplicado]

0

Eu tenho este comando bash de exemplo:

FILE='/tmp/1.txt' echo "file: $FILE"

e a saída é:

file:

Por que a saída não contém a variável anterior definida FILE?

    
por Kossak 16.02.2017 / 15:10

2 respostas

1

Quando você corre

FILE='/tmp/1.txt' echo "file: $FILE"

O shell expande a variável $ FILE antes de realizar a atribuição, portanto, supondo que FILE tenha sido desfeito anteriormente, você obteria:

FILE='/tmp/1.txt' echo "file: "

Você pode confirmar esse comportamento definindo primeiro FILE como um valor conhecido:

FILE="foo"
FILE='/tmp/1.txt' echo "file: $FILE"

A segunda linha é expandida para:

FILE='/tmp/1.txt' echo "file: foo"

Em seguida, o valor de FILE, no contexto desse comando, mudou para /tmp/1.txt . Então o shell executa echo "file: foo"

Como @admstg mencionado em sua resposta, você pode fazer:

FILE='/tmp/1.txt'; echo "file: FILE"

Mas esse comportamento é diferente do que você estava tentando originalmente. O que você tinha inicialmente define FILE somente durante o comando echo; os conjuntos acima são para a duração do shell (ou até que seja explicitamente não definido).

    
por 16.02.2017 / 15:57
1

Você deve separar os dois comandos por; para definir a variável, chamando-a.

Como você está chamando a variável no mesmo shell, não é necessário exportar a variável.

Isso deve funcionar:

FILE='/tmp/TEST.txt' ;  echo "file : $FILE"
    
por 16.02.2017 / 15:24

Tags