man bash
lee:
Special Parameters The shell treats several parameters specially. These parameters may only be referenced; assignment to them is not allowed.
Bueno, shift
cambia ambos @
y *
(de la misma manera, seguro). Y set -- one two three
de hecho asigna lo que quiero @
y *
.
Entonces ¿estoy malinterpretando lo que man
dicen 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 shift
funciones integradas para establecer los parámetros posicionales y $#
( set
con opciones) para modificar $-
, ejecutando un comando para establecer $?
, etc.
Como excepción, puede asignar a _
, aunque generalmente no se mantendrá ( _=foo a=$_
se establece a
en foo
y _
en la cadena vacía).
Respuesta2
El núcleo de su pregunta reside en qué es una tarea. man bash
aparentemente 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.