ここでドキュメントの結果をどのようにリンクできますか?

ここでドキュメントの結果をどのようにリンクできますか?

このスクリプトがあります。

while read $item;
do
    # Some bash logic here
done <<< "$({ cat /path/to/some/file; echo; })"

今、私はいくつかのディレクトリの名前を見つけてfindループと一緒にcat渡したいと思いますwhile

つまり、私は以下が欲しい:

  • cat1つの文書
  • findいくつかのディレクトリ
  • 接続結果
  • whileここに文書としてループに入力してください。

私はこの時点で詰まった。

whileロジックを繰り返すことは良いアプローチではないと思いました。また、whileループ内でロジックを再利用するために関数を使用することも検討しました。

しかし、ここにある文書の内容をリンクするのが正しいアプローチであるようです。

答え1

事実<<< "$({ cat /path/to/some/file; echo; })"は一つです。ここにある文字列引用が含まれていますコマンドの置き換えここではドキュメントの代わりに。 〜のようにカミール・マコロフスキー持つすでに指摘、コマンドの置き換えでは、2つのコマンドの結果をリンクする方法が既にわかっており、cat /path/to/some/file次のように同じ操作を実行echoできます。catfind

... <<< "$(cat /path/to/some/file; find . -name '*foo*')"

{ ... }コマンドはすでにグループ化されているため、内部コマンドは省略しました$( ... )

しかし、IMHOを使用する方が自然です。プロセスの交換出力を接続します。これがどのように機能するかを見るには、単純な入力リダイレクトから始めてください。

while IFS= read -r item
do
    # Some bash logic here
done < /path/to/some/file

次に、stdinを介してファイルの内容をループにリダイレクトします。

while IFS= read -r item
do
    # Some bash logic here
done < <(cat /path/to/some/file)

出力をcat /path/to/some/file同じ方法でリダイレクトできる擬似ファイルに変換します。これで、プロセスリストに別の標準出力生成コマンドを追加するだけです。

while IFS= read -r item
do
    # Some bash logic here
done < <(cat /path/to/some/file; find . -name '*foo*')

例を見る

すべての場合に構文はread itemありませんread $item

関連情報