busybox ash
ベースのシステムの[〜#〜] exif [〜#〜]コマンドからデータを抽出する次のスクリプトがあります。ファイルの最後からdateタグを解析し、形式が正しいことを確認するための最終チェックとしてcase
を使用します。私の問題は、最後のif
ステートメントが常にtrueを返すように見えることです。 つまりd="$e - Jebby (exif"
は常に実行されます。 echo $en
およびecho $dn
の場合、$ enが$ dnより大きいことを示していますが、if
ステートメントは引き続きd="$e - Jebby (exif"
。
x=<valid filename>
e=$(exif -d -m -t 0x9003 -- "$x" 2>/dev/null)
let l=${#e}-18
e=$(expr substr "$e" $l 19)
e="${e%[ ][0-2][0-9][:][0-6][0-9][:][0-6][0-9]*}"
e="${e##*[!1-2][!09][!0-9][!0-9][!:][!0-1][!0-9][!:][!0-3][!0-9]}"
e=$(expr substr "$e" 1 4)$(expr substr "$e" 6 2)$(expr substr "$e" 9 2)
case "$e" in
[1-2][09][0-9][0-9][0-1][0-9][0-3][0-9])
let en=$e+3
ds="${d% - Jebby (}"
let dn=$ds
if [ $en -lt $dn ]; then
d="$e - Jebby (exif"
fi
esac
私にとって、灰の比較はうまくいきます:
./busybox ash
$ [ 1 -lt 2 ] && echo true || echo false
false
$ [ 3 -lt 2 ] && echo true || echo false
true
$ a=1 b=2 c=3
$ [ $a -lt $b ] && echo true || echo false
true
$ [ $c -lt $b ] && echo true || echo false
false
$
あなたの変数の内容は正確には何ですか?あなたは-lt
数値的に比較しますか?
set -x
何が起こっているかを確認します。