BASHでファイルの内容を1行ずつループする

私はinstaller.txtというファイルを持っています。このファイルには、以下のような.tar.gzファイルのURL行が1行ずつ入っています。

http://oscargodson.com/projects/example1.tar.gz
http://oscargodson.com/projects/anotherexample.tar.gz
http://oscargodson.com/projects/onemore.tar.gz 

私は試しました:

#!/bin/bash
file = `cat installs.txt`
for word in file; do
  echo $word
done

しかし、私の出力は次のようなものです:

Oscars-MacBook-Air:Desktop oscargodson$ ./test.sh
=:                                                     cannot open `=' (No such file or directory)
http://oscargodson.com/projects/example1.tar.gz:       cannot open `http://oscargodson.com/projects/example1.tar.gz' (No such file or directory)
http://oscargodson.com/projects/anotherexample.tar.gz: cannot open `http://oscargodson.com/projects/anotherexample.tar.gz' (No such file or directory)
http://oscargodson.com/projects/onemore.tar.gz:        cannot open `http://oscargodson.com/projects/onemore.tar.gz' (No such file or directory)
file

それは、それぞれの行を出力する必要があります、または私は思った。アイデア?

1

1 答え

実際には、代入文によってエラーが生成されています。あなたはあなたの課題の周りにスペースがありません。そして、常にrhsを引用するのは良い習慣です。だからあなたが望むのは

#!/bin/bash -u
file="$(cat installs.txt)"
for word in $file; do
  echo $word
done

また、これを推奨する方法としてqoutesを $()に変更しました。

1
追加された
ありがとう。主にJavaScriptのバックグラウンドから来て、いくつかのレール、この構文は私には非常に奇妙です:)
追加された 著者 Oscar Godson,
また、シバンで-uの意味は?それはグーグルだが、役に立たない。
追加された 著者 Oscar Godson,
彼は file を使用しているときに $ も見落としていました。
追加された 著者 Gordon Davisson,
-u は、未設定の変数を参照すると、スクリプトがエラーを出力することを意味します。タイプミスを捕まえるのに非常に便利です。例えば間違って echo $ wrod してしまった場合は、空白行を印刷するだけです。しかし、 -u を指定すると、 wrod は未定義の変数であるというエラーメッセージが表示されます
追加された 著者 Sodved,