2017-12-05 4 views
0

私はこのように、ファイルからのラインの束を読み取り、アレイに各ラインを追加しようとバッシュシェルスクリプトを書いていたアレイに追加されていませんdoc.txtには、各行に1語ずつ含まれています。配列を印刷するとき(echo ${myArr[@]}またはfor x in ${myArr[@]};do echo $x; done)、配列が空であるようです。私は間違って何をしていますか?ありがとう!要素はループ

を編集してください:私は同じ結果を得てKshでこれをやってみました。私は両方で同じ問題があるように思われるので、BashまたはKshのいずれかの回答が受け入れられます。

+2

単一のコマンドを使用することができ、あなたが 'ksh'を使用していますか?たとえば、 'bash'では' while'ループがサブプロセスで実行されます。これは 'myArr'がパイプラインを実行するシェルで変更されていないことを意味します。 read -r行中に 'を試してください。行う ...; done chepner

+0

悪名高い 'cat file | cmd' ... @chepnerによって提案されたリダイレクションを使うか、ループの前に 'shopt -s lastpipe'を使います(リダイレクトがはるかに優れています)。 – PesaThe

+1

そして[BashFAQ/024](http://mywiki.wooledge.org/BashFAQ/024) –

答えて

2

whileループはサブシェルで実行されているため、シェルが終了するとアレイに加えた変更はすべて消えます。代わりに、入力のリダイレクトを使用します。

while IFS= read -r line; do 
    myArr+=("$line") 
done < doc.txt 

あなたがbash 4.0以降を使用している場合、あなたは

readArray -t myArr < doc.txt 
関連する問題