ファイルの行を繰り返す方法は?

ファイルの行を繰り返す方法は?

次のファイルがあるとしましょう。

hello
world
hello world

このショー

#!/bin/bash

for i in $(cat $1); do
    echo "tester: $i"
done

出力

tester: hello
tester: world
tester: hello
tester: world

空白を無視して各行を個別に繰り返したいと思いますfor。つまり、最後の2行を次に置き換える必要があります。

tester: hello world

引用符を使用すると、ファイル全体が一度に割り当てられますfor i in "$(cat $1)";i何を変えるべきですか?

ベストアンサー1

そしてforIFS:

#!/bin/bash

IFS=$'\n'       # make newlines the only separator
set -f          # disable globbing
for i in $(cat < "$1"); do
  echo "tester: $i"
done

しかし、空の行はスキップされます。新しいチームIFS 空白文字として、対応するシーケンスは 1 として計算され、先行シーケンスと後続シーケンスは無視されます。zshand ksh93(いいえ)を使用すると、特別な処理なしで改行文字にbash変更できます。IFS=$'\n\n'続く改行文字(末尾の空白行を含む)は常にコマンド置換によって削除されます。

またはそしてread(これ以上cat):

#!/bin/bash

while IFS= read -r line; do
  echo "tester: $line"
done < "$1"

これは空行を保持しますが、改行文字で適切に区切られない場合は、最後の行をスキップします。

おすすめ記事