findコマンドをコマンドラインから手動で実行することとスクリプトで実行するものとの間で結果が異なることがわかりました。
コマンドラインから次のコマンドを実行すると:
find . -name '*.txt' ! -name '*20120427.txt'
私は避けたい日付を持つファイルを除いて、ディレクトリ内のすべての.txtファイルを取得します。
ただし、スクリプトで同じ行を使用し、日付を識別するために変数を使用する場合:
FDATE=`date +%Y%m%d`
find . -name '*.txt' ! -name '*${FDATE}.txt'
このスクリプトは、避けたい日付を含むファイルを含むすべての.txtファイルを見つけます。
2つの唯一の違いは、スクリプトにFDAT変数を渡すことです。私は明らかなものを見逃していますか?なぜ結果が違うのか理解できませんね。
答え1
一重引用符を'*${FDATE}.txt'
二重引用符に変更します。"*${FDATE}.txt"
Unixシェルは、一重引用符で囲まれた文字列リテラル内では変数置換を実行しませんが、二重引用符で囲まれた文字列リテラル内では変数置換を実行します。