2017-10-19 21 views
-1

Je fais ceci:sortie de commande Bash comme variable numérique

VAL=$(wc -l < file_with_5_lines) 
for i in {1..${VAL}}; do echo $i; done 

attendant ce résultat:

1 
2 
3 
4 
5 

Au lieu de cela, je reçois celui-ci:

{1..5} 

EDIT

Cette question a été marquée comme doublon mais la réponse acceptée pour l'autre question n'est pas valide à mon avis. La solution proposée est la suivante:

VAL=$(wc -l < file_with_5_lines) 

for i in {1..$((VAL))}; do 
     echo $i 
done 

Et continue de me donner ce résultat:

{1..5} 

Au lieu de:

1 
2 
3 
4 
5 
+2

écrire Juste une boucle 'for' numérique normal. –

Répondre

2

L'expansion de l'accolade est faite avant param expansion et c'est pourquoi nous ne pouvons pas avoir une variable à l'intérieur {...} construire. Utilisez régulièrement pour la boucle de sorte que vous ne dépendez pas sur une commande externe comme seq:

for ((i = 1; i <= VAL; i++)); do 
    # your code here 
done 
+0

Ceci est la meilleure solution, sans commandes externes – Sergio

1

Essayez le code ci-dessous,

VAL=$(wc -l < file_with_5_lines) 
for i in `seq ${VAL}` 
do 
    echo $i 
done 
+0

Cela fonctionne bien – Sergio

0
VAL=$(wc -l < file_with_5_lines) 
for i in $(seq $VAL);do echo $i;done 
+1

quel est le problème ici? – L30n1d45

+1

Essayez ici: https://www.jdoodle.com/test-bash-shell-script-online 'echo -e" ligne1 \ nline2 \ nline3 \ nline4 \ nline5 "> entrée.txt; VAL = $ (wc - l L30n1d45

+0

Cela fonctionne bien – Sergio