オプションの関数引数を検出(スカラー)


8

次のスクリプトについて考えてみましょう。

function alfa(bravo, charlie) {
  if (charlie)
    return "charlie good"
  else {
    return "charlie bad"
  }
}
BEGIN {
  print alfa(1, 1)
  print alfa(1, 0)
  print alfa(1, "")
  print alfa(1)
}

結果:

charlie good
charlie bad
charlie bad
charlie bad

Awkには、引数が提供されていないことを通知する方法がありますか?

回答:


6

はい、これを行うことができます:

function alfa(bravo, charlie) {  
  if (charlie) {
    return "charlie good"
  }
  if (charlie == 0 && charlie == "") {
    return "charlie not provided"
  }
  if (!charlie && charlie != 0) {
    return "charlie null"
  }
  if (!charlie && charlie != "") {
    return "charlie 0"
  }
}

結果:

charlie good
charlie 0
charlie null
charlie not provided

6

awk初期化された変数をチェックする組み込みの方法はありません。あなたはそれを自分でしなければなりません:

function alfa(bravo, charlie) {
  if (charlie == 0 && !length(charlie))
    return "charlie bad"
  else {
    return "charlie good"
  }
}
BEGIN {
  print alfa(1, 1)
  print alfa(1, 0)
  print alfa(1, "")
  print alfa(1)
}

一般的な方法:

var == 0 && !length(var)

初期化されていない変数と0はvar == 0trueと評価され!length(var)、の場合は除外されますvar = 0

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.