Why did
$iddisappear after theEOF?
Porque, quando você diz << e, em seguida, $ , você obtém o valor que a variável já possui.
Se você fizer
id=foo
cat >run_pos2bed3.sh <<EOF
ls 2*/peaks.txt | while read id;
do echo $id done;
EOF
você verá que obtém do echo foo done .
How can I add
$idafterEOF?
Faça
cat >run_pos2bed3.sh << \EOF
ls 2*/peaks.txt | while read id;
do echo $id done;
EOF
A diferença é o \ antes do EOF na linha << .