Substituição de comando não funciona dentro da condição de loop

Substituição de comando não funciona dentro da condição de loop

for (( a=1;a<=$(wc -l sedtest1);a++ ));do echo $a; done

Me dá um erro:

-bash: ((: a<=21 sedtest1: syntax error in expression (error token is "sedtest1")

Responder1

A saída de wc -l sedtest1será algo como:

21 sedtest1

Portanto, o teste se tornará algo a <= 21 sedtest1inválido.

Além disso, isso significa que o wccomando será executado para cada iteração do loop. Se o conteúdo do sedtest1arquivo não mudar entre cada iteração, seria melhor salvar esse número de linhas primeiro em uma variável fora do loop:

n=$(wc -l < sedtest1) # using redirection avoids the output containing the filename
for ((a = 0; a < n; a++)); do echo "$a"; done

Também suspeito que você esteja tentando usar um loop para processar texto de maneira ineficiente e sem shell. Você pode querer lerPor que usar um loop de shell para processar texto é considerado uma prática inadequada?. Fazer um loop em cada linha de um arquivo dessa maneira não é o caminho certo a seguir.

Responder2

Esqueça, eu estava sendo incrivelmente estúpido ... wc -l filesaída como "arquivo x".

Tudo que eu tive que fazer foi isso: for (( a=1;a<=$(wc -l sedtest1|awk '{print $1}');a++ ));do echo $a; done

informação relacionada