2つのテキストファイルの配列を比較しようとしています。このエラーは引き続き発生します。
./CompareScript.sh: line 11: read: `../Results/result1.txt[@]': not a valid identifier
これを正しく行う方法がわかりません。
#!/bin/bash
results=(../Results/*.txt)
correct=(../Correct/*.txt)
j=0
for i in "$results"
do
while read -r $results[$j]; do
while read -r $correct[$j];do
if [$results[$j]==$correct[$j]] ; then
echo "two files are same"
else
echo "two files content different"
fi
done
done
let "j += 1"
done
ベストアンサー1
何を達成したいのか明確ではありません。ディレクトリResults
にCorrect
一致するファイル名が含まれている場合は、そのいずれかを繰り返して別のパスを作成できます。
#!/bin/bash
results=(../Results/*.txt)
for r in "${results[@]}"; do
diff -sq "$r" "${r/\/Results\//\/Correct\/}"
done
Results
すべてのファイルをフォーム内のすべてのファイルと交差比較したい場合は、入れ子になったCorrect
ループの場合です。
#!/bin/bash
results=(../Results/*.txt)
correct=(../Correct/*.txt)
for r in "${results[@]}"; do
for c in "${correct[@]}"; do
diff -sq "$r" "$c"
done
done
かなり明らかな構文エラー:
for i in "$results"
→for i in "${results[@]}"
繰り返し値
→for i in "${!results[@]}"
繰り返し指数$results[$j]
→"${results[j]}"
[$results[$j]==$correct[$j]]
→[[ "${results[j]}" == "${correct[j]}" ]]
- 正確にはバグではありませんが…
let "j += 1"
→((++j))
- もっと重要なのはi
(全くではない)使っていて、j
あまり意味がないということです。 - 実際にファイルを 1 行ずつ読み取って処理するには、次のようにします。
while IFS= read -r line; do printf '%s\n' "$line" some_other_command "$line" done < "${results[i]}" # for example
- しかし、なぜこれを行うのですか?ファイルを比較したい場合は、
diff
そうしてください。
- しかし、なぜこれを行うのですか?ファイルを比較したい場合は、