現在のディレクトリにはXMLファイルがたくさんあります。
質問1.
私が読んだところによれば、evalは結果を返し、それを変数に保存します。ただし、次のコマンドの使用中にエラーが発生します。
find ./ -name '*.xml' | file=$(eval awk '{print $0}') ; echo $file
編集(CASが指摘したように評価を省略した後) -
eval を省略すると、単に空の文字列が返されます。
find ./ -name '*.xml' | file=$(awk '{print $0}') ; echo $file
質問2.
私はちょうどbashを学びたかったので、最初の2つのファイルをfindの出力と比較する複雑なシーケンスを作成しました。複雑な順序は、単にbashプログラミングの概念を理解することです。
find ./ -name '*.xml' | file=$(awk '{print $0}') ; echo $file && diff -y $(sed '2q;d' $file) $(sed '1q;d' $file)
ベストアンサー1
以下は、bashで配列を使用してこれを行う1つの方法の非常に簡単な例です。
#!/bin/bash
IFS=$'\n' files=( $(find . -name '*.xml' | head -n 2) )
if [[ -n ${files[0]} && -n ${files[1]} ]] ; then
diff "${files[0]}" "${files[1]}"
fi
その後、find ... | head -n 2
コマンドが実行され、各行(返されたファイル名)が配列に保存されます$files
。最初の2つの配列要素(0と1)が空でない場合は、そのファイル名を使用してdiffを実行します。
ディレクトリまたはファイル名に改行文字が含まれていると中断される可能性があります。