O loop que você tem parece que deveria funcionar, recompilaria o programa para os valores de N
igual a 10
e 20
.
No entanto.
1) Se você quiser todos os 11 valores entre 10 e 20, terá que usar algo como for x in {10..20}
ou for ((x = 10 ; x <= 20 ; x++))
.
2) Mudar o código-fonte duas vezes parece um pouco inútil, pode ser mais limpo manter uma versão base que não muda, a qual você modifica conforme necessário, por exemplo,
sed -e 's/const int N = 10;/const int N = '"$x"';/g' base.cpp > test.cpp
g++ -Wall test.cpp -o test
./test
rm test.cpp test
ou mesmo algo como sed -Ee 's/^(const int N =)[^;]*;/ '"$x"';/g'
para ignorar completamente o valor na atribuição.
3) Não use test.o
para o arquivo executável. A extensão .o
sugere um arquivo de objeto, o que você obteria executando gcc -c test.c
. Além disso, neste caso, x
contém apenas números, mas apenas para estar no lado seguro, é melhor citá-lo duas vezes, como acima.
Dito isto, modificar o programa para ler o número fora da linha de comando em vez de recompilar para cada valor não seria muito difícil. Isso atribuiria o primeiro argumento a N
e depois imprimi-lo (está em C, mas, até onde eu sei, os argumentos para main
funcionam de maneira semelhante em C ++):
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int N = 10;
if (argc > 1) N = atoi(argv[1]);
printf("N: %d\n", N);
return 0;
}