Détecter l'argument de fonction facultatif (scalaire)

8

Considérez ce script:

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)
}

Résultat:

charlie good
charlie bad
charlie bad
charlie bad

Awk a-t-il un moyen de savoir quand un argument n'a pas été fourni?

Steven Penny
la source

Réponses:

6

Oui, vous pouvez le faire:

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"
  }
}

Résultat:

charlie good
charlie 0
charlie null
charlie not provided
Steven Penny
la source
6

awkn'a pas de méthode intégrée pour vérifier que la variable a été initialisée. Vous devez le faire vous-même:

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)
}

La manière générale:

var == 0 && !length(var)

Une variable non initialisée et 0 entraînent var == 0une évaluation à true, !length(var)exclut le cas où var = 0.

cuonglm
la source