0

フォルダー内のすべてのファイルを一覧表示し、それらをセミコロンで区切って変数に追加しようとしています。
次に、変数をファイルにエコーする必要があります。これは私のスニペットです

#!/bin/bash
SEP=";"
LIB="lib/"
DEP=""
ls -t1 target/lib/ | while read -r FILE
do
    DEP=$DEP$LIB$FILE$SEP
done
echo "$DEP"

DEP変数は while ループ内に入力されます。そこからエコーすると、正しい結果が表示されます。ループの外側では、変数は「クリア」され、何もエコーしません。結果を保持するにはどうすればよいですか?私は何を間違っていますか?

OsX 10.8.3 GNU bash、バージョン 3.2.48(1) リリース (x86_64-apple-darwin12) Copyright (C) 2007 Free Software Foundation, Inc.

4

1 に答える 1

4

問題は while ループではなく、パイプです。シンボルの後のすべて|がサブシェルで実行されます。この問題を回避するには、プロセス置換を使用します。

while read -r FILE
# ...
done < <(ls -t1 target/lib/)
于 2013-04-29T09:53:45.040 に答える