パラメータと一致するイメージファイルを返すのに問題があります。 $ 1は検索パラメータであり、この場合は「実際」であり、指定されたフォルダ内の1つの画像(2つではない)のラベルです。 "./test.sh real"を呼び出すと、1つではなく2つの画像が印刷されます。関数の戻り値を変数および/または条件文に設定する操作を処理する必要があるようですが、わかりません。
#!/bin/bash
for f in specim/*.jpg
do
image=$(exiftool -EXIF:XPKeywords $f | grep "$1")
if [[ ! -z "$image// }" ]]; then
echo $f
fi
返される内容:
../../test.sh real
specim/image2.jpg
specim/image.jpg
このbashスクリプトは私が欲しいものを印刷します。 2つではなく1つの画像のみを印刷します(私が望んでいないEXIFtool項目ですが、これは単なるテストです)。
#!/bin/bash
for f in *.jpg
do
exiftool -EXIF:XPKeywords $f | grep $1
done
結果:
./test2.sh real
XP Keywords : name;real
どんな助けでも大変感謝します。これはとても簡単かもしれません...ありがとう
ベストアンサー1
これはあなたが疑うことであり、小さな変更だけで解決することができます。以下を試してください。
if [[ ! -z "$image" ]]; then
説明する
Exiftool と grep が一致した場合、変数$image
に次のものが含まれているとします。
abcabcabc
ただし、出力がない場合は、次$image
が含まれます。 (何もなし)
テスト条件には以下が含まれます。
if [[ ! -z "$image// }" ]]; then
したがって、最初のケースでは、bashは次のことを確認します。
if [[ ! -z "abcabcabc// }" ]]; then
しかし、2番目のケースでは、bashは次のことを確認します。
if [[ ! -z "// }" ]]; then
if "// }" is NOT zero-value, then...
しかし、テストによると、"// }"
常にゼロではなく、2つのスラッシュ、スペース、および中括弧で構成される文字列です。したがって、そこにゼロ以外の値があるものがあるため、then
一致する項目がなくてもそのセクションがトリガーされる理由です$image
。したがって、それを削除すると// }
動作します。