Avaliação do Heredoc Param no Bash

3
$times=
ssh -A [email protected] <<- EOF
        for i in {1..$times}
        do
                echo 'Iteration' $i
                url='vyas@app'
                echo 'Connecting to' $url
        done
EOF

Ambas as declarações de eco imprimem espaços em branco para o nome da variável:

  

Iteração   Conectando-se a

$times=
ssh -A [email protected] <<- \EOF
        for i in {1..$times}
        do
                echo 'Iteration' $i
                url='vyas@app'
                echo 'Connecting to' $url
        done
EOF

Saída:

  

Iteração {1…}   Conectando-se ao vyas @ app

Estou executando os scripts acima com ./rt.sh (./rt.sh 5). Como obtenho o valor de $ i para ler 1 .. $ times?

    
por Vyas Bharghava 28.02.2014 / 17:29

1 resposta

2

O shell executa a expansão de contraventamento antes da substituição de variáveis, portanto, a construção for i in {1..$x} não pode funcionar conforme o esperado.

Como você quer passar uma variável, você não pode escapar do terminador heredoc, então você tem que trabalhar para proteger todas as variáveis que você não quer expandir

times=    # no "$" on the left-hand side!
ssh -A [email protected] <<- EOF
        for i in $(seq $times)
        do
                echo Iteration $i
                url='vyas@app'
                echo 'Connecting to' $url
        done
EOF
    
por glenn jackman 28.02.2014 / 20:11

Tags