como enviar inteiro como parâmetro [closed]

2

Eu preciso escrever um script no Linux. Eu quero executar uma função várias vezes com um parâmetro diferente em cada iteração.

Eu escrevo o seguinte código:

#!/bin/bash
bash << _EOF_
for ((i=0; i<=20;i++));do
MYFUNCTION -X
done
_EOF_

onde -X deve ser um inteiro. Eu tentei escrever $i , mas sem sucesso.

    
por ori tabib 17.07.2016 / 21:51

2 respostas

8

Perca o heredoc e ele deve funcionar bem:

#!/bin/bash
for ((i=0; i<=20;i++));do
    MYFUNCTION "-$i"
done

alternativamente, você pode usar um heredoc com citação simples , o que impedirá que o $i de seja interpolado do contexto externo onde não está definido :

#!/bin/bash

bash << '_EOF_'
for ((i=0; i<=20;i++));do
    MYFUNCTION "-$i"
done
_EOF_

mas dificilmente há uma boa razão para começar outra parte de um processo bash recém-iniciado.

    
por 17.07.2016 / 23:06
2

Não há razão para usar o heredoc neste contexto.

O código abaixo funcionou bem com a versão 4.2.26 do bash:

#!/bin/bash
function f()
{
    echo $1;
};
for i in {1..20}; # This works for a range of integers, but for unrelated values, you can use "i in x y z" format
do
    f $i; 
done;

Se você ainda tiver problemas, forneça a versão bash e o código completo que você está testando.

    
por 18.07.2016 / 00:23