¿Por qué en la página de manual de bash se lee que "solo se puede hacer referencia a parámetros especiales; no se permite asignarlos"?

¿Por qué en la página de manual de bash se lee que "solo se puede hacer referencia a parámetros especiales; no se permite asignarlos"?

man bashlee:

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

Bueno, shiftcambia ambos @y *(de la misma manera, seguro). Y set -- one two threede hecho asigna lo que quiero @y *.

Entonces ¿estoy malinterpretando lo que mandicen las páginas?

Respuesta1

No puede asignar parámetros especiales. No puede utilizar el operador de asignación ( 1=foo, @=(foo bar), ?=0,…). No puede utilizar la construcción de expansión del parámetro de asignación ( ${1=foo},…).

Claro, puede modificarlos, pero debe usar un método indirecto distinto de la asignación, como set(con argumentos que no son opciones) o shiftfunciones integradas para establecer los parámetros posicionales y $#( setcon opciones) para modificar $-, ejecutando un comando para establecer $?, etc.

Como excepción, puede asignar a _, aunque generalmente no se mantendrá ( _=foo a=$_se establece aen fooy _en la cadena vacía).

Respuesta2

El núcleo de su pregunta reside en qué es una tarea. man bashaparentemente no lo define, peroLa especificación POSIX tiene una palabra:

4.23 Asignación de variables

En el lenguaje de comandos del shell, una palabra que consta de las siguientes partes:

nombrevar=valor

Puede modificar los parámetros especiales $@y $*mediante algún medio integrado en el shell, pero en realidad no puede escribirles una asignación. Fueron elegidos sabiamente, diría yo, porque de hecho parecería muy antinatural escribir *=string, incluso para ojos no tan entrenados.

información relacionada