Como "enviar" variável para sub-shell?

24

Eu corro o seguinte script:

VAR="Test"
sh -c 'echo "Hello $VAR"'

Mas eu recebo:

# ./test.sh
Hello

Como posso "enviar" a variável VAR do meu script para o shell criado com sh -c ?

    
por Matthieu Napoli 24.10.2011 / 10:20

3 respostas

42

Use export para transformá-lo em uma variável de ambiente ou passe-o diretamente para o comando.

VAR="Test" sh -c 'echo "Hello $VAR"'

VAR="Test"
export VAR
sh -c 'echo "Hello $VAR"'

Ou simplesmente use aspas duplas para permitir a interpolação sem ter que exportar nada nem passar o var para o comando:

VAR='Test';
sh -c " echo 'Hello $VAR' "
    
por 24.10.2011 / 10:27
6

Aqui está outra forma de passar variáveis para sh -c (como argumentos posicionais):

{
VAR="world"
VAR2='!'
sh -c 'echo "Hello ${0}${1}"' "$VAR" "$VAR2"
}
    
por 24.10.2011 / 12:52
5

Se você não quiser exportá-los como variáveis de ambiente, aqui está um truque que você pode fazer. Salve sua definição variabe em um arquivo .var_init.sh e coloque-a no seu sub-shell assim:

.var_init.sh

VAR="Test"

na linha de comando:

sh -c ". .var_init.sh && echo \$VAR" # Make sure to properly escape the '$'

Dessa forma, você só define suas variáveis na execução do subshell.

    
por 24.10.2011 / 11:36