Warum steht auf der Manpage von Bash, dass auf spezielle Parameter „nur verwiesen werden darf; eine Zuweisung an sie ist nicht zulässig“?

Warum steht auf der Manpage von Bash, dass auf spezielle Parameter „nur verwiesen werden darf; eine Zuweisung an sie ist nicht zulässig“?

man bashlautet:

Special Parameters
       The shell treats several parameters specially.
       These parameters may only be referenced; assignment to them is not allowed.

Nun, shiftändert sowohl @als auch *(natürlich auf die gleiche Weise). Und weist tatsächlich und set -- one two threezu, was ich will .@*

Interpretiere ich also die manAngaben auf den Seiten falsch?

Antwort1

Sie können keine Zuweisungen an spezielle Parameter vornehmen. Sie können den Zuweisungsoperator ( 1=foo, @=(foo bar), ?=0, …) nicht verwenden. Sie können die Erweiterungskonstruktion für Zuweisungsparameter ( ${1=foo}, …) nicht verwenden.

Natürlich können Sie sie ändern, aber Sie müssen eine indirekte Methode außer der Zuweisung verwenden, z. B. set(mit Argumenten ohne Optionen) oder shiftintegrierte Funktionen zum Festlegen der Positionsparameter und $#( setmit Optionen) zum Ändern $-, Ausführen eines Befehls zum Festlegen $?usw.

Ausnahmsweise können Sie tatsächlich an zuweisen _, obwohl dies normalerweise nicht funktioniert ( _=foo a=$_setzt aauf foound _auf die leere Zeichenfolge).

Antwort2

Der Kern Ihrer Frage liegt darin, was eine Aufgabe ist. man bashdefiniert es anscheinend nicht, aberDie POSIX-Spezifikation hat ein Wort dazu:

4.23 Variablenzuweisung

In der Shell-Befehlssprache ein Wort, das aus den folgenden Teilen besteht:

Varname=Wert

Sie können die speziellen Parameter $@und $*mit einigen in der Shell integrierten Mitteln ändern, aber Sie können ihnen keine Zuweisung schreiben. Ich würde sagen, sie wurden mit Bedacht gewählt, denn es würde tatsächlich sehr unnatürlich aussehen, wenn man sie schreibt *=string, sogar für nicht so geschulte Augen.

verwandte Informationen