2017-06-21 7 views
0

私はbashスクリプトを書いていますが、私が間違っていることを理解できません。結果は次のとおりです。ファイルは変数ごとに作成されますが、最初の変数のみがデータを持っています。他のファイルは空です。私は手動で各変数が数行を返すべきであることを確認しました。奇妙なことは、私はちょうど行う場合ということです:"for"ループの一部だけが動作しています

for i in "${VAR_LIST[@]}" 
do 
echo "$i" 
done 

私はあなたが一度だけ入力ファイルを開いているVAR_LIST

+2

あなたは一度だけ*あなたの入力ファイルを読み込みます*。ループ毎の反復*を1回読みたい場合は、ループの中に '<$ 1 'を入れる必要があります。 – ruakh

+1

ところで、OSやシステムの意味を持つ名前にはすべての変数名が使用されますが、POSIXではアプリケーションが指定されたシェルやユーティリティに影響を与えたり影響を受けたりすることなく小文字の名前を使用できることが保証されています。 http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.htmlの第4段落を参照してください。シェル変数を代入すると、同じような名前の環境変数が自動的に更新されるので、これは 'export'が実行されていなくても適用されます。 –

+0

ありがとう、@ruakh;次回はあなたのコメントを回答として書いておきたいかもしれません;-) – madmaxthc

答えて

2

内のすべての変数のリストを取得する - 最初grep一度持っていることを意味していますそれを読んで、将来の人が読むために残すことは何もありません。

bashがseek()を呼び出す方法を持っていないので、あなたが呼び出しごとに一度ファイルを再度開く必要があります:

for i in "${VAR_LIST[@]}" 
do 
     grep "$i" >"${FilePrefix}${counter}.tab.txt" <"$1" 
     counter=$((counter+1)) 
done 
関連する問題