If 文の使用 [閉じる]

If 文の使用 [閉じる]

BashでIf / elseステートメントを使用しようとしています。どちらが正しい構文か混乱しています。

  if [ "$NUMBER_dcn" -gt $NO ]
  then
  dir_dcn='/mnt/md0/capture'
  fi

または

   if [ "{$NUMBER_dcn}" -gt $NO ]
  then
  dir_dcn='/mnt/md0/capture'
  fi

NUMBER_dcn は次のように入力されます。

NUMBER_dcn=$(find /mnt/md0/capture/ -maxdepth 1 -name "*.pcap" |wc -l)

どちらか一方は「予測整数式」エラーを表示するため、どちらも正確です。

答え1

変数を参照する正しい方法はです$VARVARパディングがあるので、常にwcヌルではないと仮定し、実際に引用符は必要ありません。""これは変数が完全に空であることを防ぐためです。

しかし、これはあなたの問題ではありません。この-gt演算子には2つの引数が必要なだけでなく、整数でなければなりません。ここで渡すことは、-gt例えば、501つのケースとは{50}異なる場合です。後者は整数式ではなくで始まる文字列なので、中{かっこを削除する必要があります。

中括弧は、変数を使用するために許可される代替構文です。$VARと同じです${VAR}。これは時々次のような場合に便利です。入れる変数のやり方は、変数名が終わる場所が明確ではありません。たとえば、変数の値とインデックスを印刷するには、次のように作成する必要があります。

echo ${VAR}00

このような出力を取得してくださいHugo00。中かっこがない場合、bashは変数を逆参照しようとしますVAR00が、そのような変数が存在しないため失敗します。 (この場合は中括弧の前にドル記号があります。)しかし、何も挿入せずに変数をそのまま使用するので、中括弧を使用する必要はありません。

関連情報