linux - Redirecting output of bash for loop -


i have simple bash command looks like

for in `seq 2`; echo $i; done; > out.dat 

when runs output of seq 2 output terminal , nothing output data file (out.dat)

i expecting standard out redirected out.dat running command seq 2 > out.dat

remove semicolon.

for in `seq 2`; echo "$i"; done > out.dat 

suggestions

also suggested fredrik pihl, try not use external binaries when not needed, or @ least when practically not:

for in {1..2}; echo "$i"; done > out.dat ((i = 1; <= 2; ++i )); echo "$i"; done > out.dat in 1 2; echo "$i"; done > out.dat 

also, careful of outputs in words may cause pathname expansion.

for in $(echo '*'); echo "$a"; done 

would show files instead of literal *.

$() recommended clearer syntax command substitution in bash , posix shells backticks (`), , supports nesting.

the cleaner solutions reading output variables are

while read var;     ...    done < <(do something) 

and

read ... < <(do something)  ## done on loop or readarray.  in "${array[@]}";     : done 

using printf can easier alternative respect intended function:

printf '%s\n' {1..2} > out.dat 

Comments

Popular posts from this blog

html - How to style widget with post count different than without post count -

How to remove text and logo OR add Overflow on Android ActionBar using AppCompat on API 8? -

javascript - storing input from prompt in array and displaying the array -