2017-10-10 4 views
0

すべてのファイルのペアの違いを比較しようとしています。しかし、ファイルのペアを比較するには、forループの現在の要素の後ろにある要素にアクセスできる必要があります。これは私が現在持っているコードです -BASH - ファイル名のforループの次の要素を取る

#!/bin/bash 
for file in $(find -type f); do 
    b = $(file+1) -- I know this is not the correct way to access the next element 
    diff $(file) $(b) >/dev/null 
    if [ #? -eq 0 ] 
     echo $(file) and $(b) are the same 
    else 
     echo $(file) and $(b) are not the same 
    fi 
done 

次の要素にアクセスする方法についての助けがあれば幸いです。

答えて

1

次の要素の代わりに前の要素にアクセスすることができます。現在のファイル名を格納し、次の要素に再利用します。

#!/usr/env/bin bash 

declare previous="" 

for file in $(find -type f); do 
    if [[ -n $previous ]]; then 
    if diff --brief "${previous}" "${file}" > /dev/null; then 
     echo "${previous} and ${file} are the same" 
    else 
     echo "${previous} and ${file} are not the same" 
    fi 
    fi 
    previous="${file}" 
done 

注:ような何かあなたが本当に(上記のコードのように)中括弧を使用して、変数名を囲みたい場合は、(あなたのコードのように)いない括弧:${file}は、変数の値として評価されますfile$(file)は、引数なしでコマンドfileを呼び出し、エラーメッセージを返します。

+0

これは完璧に動作します:)ありがとうございます。中括弧と括弧についても、私はそれを提出した後で認識しました。私は、テキストを端末から正しくコピーしませんでした。再度、感謝します! – GregHamilton2

関連する問題