フォルダの内容の確認に失敗しました

フォルダの内容の確認に失敗しました

Bashスクリプトスニペット

folder="some folder's name"
a="$folder/"*".pdf"
if [ "$a" != "$folder"'/*.pdf' ]
then
    echo check
fi

印刷しないでくださいcheck

名前がフォルダーで終わるcheckファイルが1つ以上ある場合にのみ印刷したいと思います。.pdf$folder

echo $aそして、echo "$folder"'/*.pdf'印刷する予定の内容を正確に印刷します。*.pdf指定されたフォルダにファイルが1つ以上ある場合、前者は一致するパスを印刷し、それ以外の場合は後者が印刷する内容を印刷します。後者は常に関連付けられている指定された古い名前を印刷します/*.pdf

  1. Bashはなぜこのように動作しますか?
  2. どのように機能させますか?

答え1

式は"$folder/"*".pdf"すべての可能なものに拡張されます.pdf
なぜですか?これ*ロゴは特別な意味を保ちます。ワイルドカード

この文字列は、"$folder"'/*.pdf'2つの別々の文字列"$folder"を連結したものにすぎません'/*.pdf'
〜のように*一重引用符で囲まれた記号 - it失うその特別な意味。


主な目標に基づいて.pdf現在のフォルダに1つ以上のファイルがあることを確認してください。そして、いくつかの"pdf file found!"成功したフレーズを印刷してみてください。

if [ ! -z `find foldername -type f -name "*.pdf" -print -quit` ]; then 
    echo "pdf file found!"
fi

答え2

二重引用符で囲まれた内容は(比較)を含む文字列なので、あなたのifステートメントは機能しません。二重引用符を削除すると、複数のファイルが一致すると文が失敗します。$a*echo "$a"echo $aif

don_crisstiのリンクには素晴らしい解決策があります。

関連情報