Está utilizando el tipo de comillas incorrecto.
Debe usar comillas inversas en lugar de comillas simples para que el argumento sea un programa que se ejecuta y canaliza el contenido al forloop.
for tbl in `cat /tmp/tables`
do
echo "$tbl"
done
También para una mejor legibilidad (si está usando bash), puede escribirlo como
for tbl in $(cat /tmp/tables)
do
echo "$tbl"
done
Si sus expectativas son obtener cada línea (los bucles for anteriores le darán cada palabra), entonces es mejor que use xargs
, así
cat /tmp/tables | xargs -L1 echo
o como un bucle
cat /tmp/tables | while read line; do echo "$line"; done
Las comillas simples deben ser acentos graves:
for tbl in `cat /etc/tables`
Aunque, esto no le dará salida/entrada por línea, sino por palabra. Para procesar línea por línea, debe probar algo como:
cat /etc/tables | while read line
echo $line
done