変数が等しい場合は常に false

変数が等しい場合は常に false

まず、ファイルサイズ情報を取得するためにカールを使用します。

fileSize=$( curl http://linux.die.net/include/sys/ioctl.h --head | grep Content-Length | awk '{print $2}')

echo $fileSize1825年

その後、ファイルをダウンロードしてサイズを確認します。

downloadedSize=$(wc -c ioctl.h | awk '{print $1}')

echo $downloadedSize1825年

その後、この変数を比較したいと思います。しかし、条件は常に偽です。

if [[ "$fileSize" == "$downloadedSize" ]]; then
    echo "success"
  else
    echo "fail"
  fi

私はこれを試しました

if [ "$fileSize" == "$downloadedSize" ]; then
if [ $fileSize == $downloadedSize ]; then
if [[ $fileSize == $downloadedSize ]]; then

代わり-eq==

何が問題なの?

ベストアンサー1

ランニング:

$ echo "$fileSize" | od -c
0000000   1   8   2   5  \r  \n
0000006
$ echo "$downloadedSize" | od -c
0000000   1   8   2   5  \n
0000005

最初のケースでは、キャリッジリターンが値に追加され(httpヘッダーにdos行終端がある:CRLF)、2番目の変数は正しいことを示しています。 CR(\r)を削除するとテストが機能します。たとえば、

fileSize=$( curl http://linux.die.net/include/sys/ioctl.h --head |
   awk '/Content-Length/ {gsub("\r",""); print $2; exit}')

おすすめ記事