このスクリプトがあります。
while read $item;
do
# Some bash logic here
done <<< "$({ cat /path/to/some/file; echo; })"
今、私はいくつかのディレクトリの名前を見つけてfind
ループと一緒にcat
渡したいと思いますwhile
。
つまり、私は以下が欲しい:
cat
1つの文書find
いくつかのディレクトリ- 接続結果
while
ここに文書としてループに入力してください。
私はこの時点で詰まった。
while
ロジックを繰り返すことは良いアプローチではないと思いました。また、while
ループ内でロジックを再利用するために関数を使用することも検討しました。
しかし、ここにある文書の内容をリンクするのが正しいアプローチであるようです。
答え1
事実<<< "$({ cat /path/to/some/file; echo; })"
は一つです。ここにある文字列引用が含まれていますコマンドの置き換えここではドキュメントの代わりに。 〜のようにカミール・マコロフスキー持つすでに指摘、コマンドの置き換えでは、2つのコマンドの結果をリンクする方法が既にわかっており、cat /path/to/some/file
次のように同じ操作を実行echo
できます。cat
find
... <<< "$(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
。