Rileva argomento funzione opzionale (scalare)


8

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

Risultato:

charlie good
charlie bad
charlie bad
charlie bad

Awk ha un modo per dire quando non è stato fornito un argomento?

Risposte:


6

Si, puoi fare questo:

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

Risultato:

charlie good
charlie 0
charlie null
charlie not provided

6

awknon ha un modo incorporato per verificare che la variabile sia stata inizializzata. Devi farlo da solo:

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

Il modo generale:

var == 0 && !length(var)

Una variabile non inizializzata e 0 fa sì var == 0che venga valutata vera, !length(var)esclude il caso in cui var = 0.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.