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
awk
hat 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 == 0
dass als wahr ausgewertet wird, !length(var)
schließt den Fall aus, wenn var = 0
.