Optionales Funktionsargument erkennen (Skalar)

Optionales Funktionsargument erkennen (Skalar)

Betrachten Sie dieses Skript:

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

Ergebnis:

charlie good
charlie bad
charlie bad
charlie bad

Verfügt Awk über eine Möglichkeit, zu erkennen, wenn ein Argument nicht angegeben wurde?

Antwort1

Ja, das können Sie tun:

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

Ergebnis:

charlie good
charlie 0
charlie null
charlie not provided

Antwort2

awkhat keine eingebaute Möglichkeit zu prüfen, ob die Variable initialisiert wurde. Das müssen Sie selbst tun:

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

Der allgemeine Weg:

var == 0 && !length(var)

Eine nicht initialisierte Variable und 0 führen dazu, var == 0dass als wahr ausgewertet wird, !length(var)schließt den Fall aus, wenn var = 0.

verwandte Informationen