ich diese Funktion in einem Bash-Skript haben kann, die auf die Schaleungesetzt bash Funktion Variable mit Nicht-Standard-Namen
function suman{
echo "using suman function"
}
wenn ich
unset suman
nennen
Dinge bezogen wird scheinen wie erwartet zu funktionieren
aber wenn ich dies als meine Funktion:
function suman-inspect {
echo "using suman-inspect function"
}
dann, wenn ich
unset suman-inspect
oder
unset "suman-inspect"
nennen erhalte ich diese Meldung:
bash: unset: `suman-inspect': not a valid identifier
Wie kann diese Variable nicht gesetzt wie?
+1 Faszinierend! Die Dokumentation für "Unset" sagt, dass "Wenn keine Optionen angegeben werden, bezieht sich jeder * Name * auf eine Variable; Wenn es keine Variable mit diesem Namen gibt, ist jede Funktion mit diesem Namen nicht gesetzt. "Ich hätte angenommen, dass dies funktionieren würde, selbst wenn die Variable kein gültiger Variablenname ist, aber offensichtlich nicht! – ruakh
Wahrscheinlich ist das was' unset' * setzt * voraus, dass sein Argument (sans '-f') ein Bezeichner ist, aber wenn keine Variable mit diesem Namen existiert, überprüft es, ob Sie stattdessen eine Funktion deaktivieren möchten.Nur wenn Sie '-f' explizit verwenden, lockern Sie' bash' die Regel "Argument muss eine gültige ID sein". Bei einigen Bash-Erweiterungen fehlen genau dokumentierte Beschreibungen ihrer Semantik. Einige andere Beispiele umfassen die Prozesssubstitution (z. B., wo '> (...)' seine Standard * -Ausgabe * von? erbt) und Funktionsexporte (vgl. ShellShock). – chepner
Ist der Bindestrich in suman-inspect ein ungültiger Bezeichner? –