Ist es eine gute Shell-Programmierpraxis, Read-Only-Variablen wann immer möglich zu verwenden oder hat sie irgendwelche Nachteile? Z.B. Wenn ich ein Skript schreiben möchte, das aus mehreren Skriptdateien besteht, die unveränderliche Dateipfade verwenden, wäre es sinnvoll, die Pfade wie folgt zu deklarieren:
%Vor%Noch eine Frage: Ist es eine gute Idee, den monolithischen und langweiligen Shellcode-Code in separate Dateien zu zerlegen? Vielen Dank für Ihre Antworten.
Generell ist es eine gute Sache, Read-Only-Variablen (in jeder Sprache) zu verwenden und Ihr Programm (in jeder Sprache) zu modularisieren.
Read-only-Variablen schützen vor einer häufigen Fehlerquelle und verbessern die Lesbarkeit und Wartbarkeit. Wenn Sie wissen, dass Sie sich auf den Wert einer Variablen verlassen können, können Sie besser über Ihr Programm nachdenken und später Annahmen über diese Variable treffen - Dinge, die Sie nicht tun könnten, wenn die Variable änderbar wäre.
Modularisierung verbessert Wartbarkeit und Wiederverwendbarkeit. Mehr Module bedeuten im Allgemeinen feinkörnigere Einheiten, die unter verschiedenen Umständen wiederverwendet werden können, kürzere Codes, die leichter zu lesen sind, und wenn Ihre Module unabhängig sind, weniger Interaktionen zwischen Teilen, die eine Modifikation zerstören könnten.
Eine klassische Verwendung von schreibgeschützten Variablen ist mit TMOUT
. Wird diese Variable auf einen Wert ungleich Null gesetzt, wird eine interaktive Terminalsitzung nach TMOUT
Sekunden Inaktivität (d. H. Keine Tastatureingabe) abgemeldet. Um zu verhindern, dass ein intelligenter Benutzer die Einstellung überschreibt, verwenden Sie readonly
:
Nachdem dies geschehen ist, gibt es keine Möglichkeit zu tun:
%Vor%Ich glaube nicht, dass Readonly-Variablen in bash nützlich sind. Ich kann mir kein Problem vorstellen, das ich hätte verhindern können, indem ich eine Variable nur lesbar gemacht hätte. Solche Einschränkungen stehen der dynamischen Natur von bash entgegen. Es gibt andere häufigere Ursachen für Probleme (wie zB Fehlbuchungen oder das Vergessen, Variablen als lokal zu deklarieren), die sowieso nicht verhindert werden können.
Wenn Sie Dinge trennen wollen, versuchen Sie nur "Funktionen" zu teilen, nicht nur Code-Stücke. Es ist einfacher, eine kleine Sache wiederzuverwenden, wenn Sie wissen, dass "source ~ / myscript.sh" eigentlich gar nichts macht.