「読み取り」コマンドを使用する必要があります
while read name
do
echo "$name"
done < names.txt
「$name」は引用符で囲まれていることに注意してください。引用符で囲まれていない場合、$IFS
区切り文字として文字を使用して分割されます。これは、変数をエコーするだけではおそらく気付かないでしょうが、コピーしたいファイル名のリストがファイルに含まれている$IFS
場合、変数が引用符で囲まれていない場合、それらは分解されます。これはあなたが望むものではありませんまたは期待します。
マイク・クラークのアプローチ (読み取りを使用するのではなく、変数にロードする) を使用する場合は、を使用せずに実行できますcat
。
NAMES="$(< scripts/names.txt)" #names from names.txt file
for NAME in $NAMES; do
echo "$NAME"
done
これに関する問題は、ファイル全体を にロードすること$NAMES
です。それを読み戻すと、ファイル全体 (引用されている場合) または引用されて$IFS
いない場合は によって分割されたファイルを取得できます。デフォルトでは、個々の行ではなく、個々の単語が表示されます。そのため、「Mary Jane」という名前が 1 行に表示された場合、「Mary」と「Jane」が 2 つの別々の名前として表示されます。を使用read
すると、これを回避できます...ただし、の値を変更することもできます$IFS