Sie verwenden die falsche Art von Anführungszeichen.
Sie müssen die umgekehrten Anführungszeichen anstelle des einfachen Anführungszeichens verwenden, damit das Argument ein Programm ist, das ausgeführt wird und den Inhalt an die forloop weiterleitet.
for tbl in `cat /tmp/tables`
do
echo "$tbl"
done
Zur besseren Lesbarkeit (wenn Sie Bash verwenden) können Sie es auch als
schreibenfor tbl in $(cat /tmp/tables)
do
echo "$tbl"
done
Wenn Sie erwarten, dass Sie jede Zeile erhalten (die for-Schleifen oben geben Ihnen jedes Wort), dann sind Sie vielleicht besser dran, wenn Sie xargs
verwenden , so
cat /tmp/tables | xargs -L1 echo
oder als Schleife
cat /tmp/tables | while read line; do echo "$line"; done
Die einfachen Anführungszeichen sollten Backticks sein:
for tbl in `cat /etc/tables`
Dadurch erhalten Sie jedoch keine zeilenweise Ausgabe / Eingabe, sondern wortweise. Um Zeile für Zeile zu verarbeiten, sollten Sie Folgendes versuchen:
cat /etc/tables | while read line
echo $line
done