Estoy aprendiendo scripts de bash y encontré esto en mi / usr / share / bash-complete, línea 305:
local cword words=()
¿Qué hace? Todos los tutoriales en línea son solo en el formato
local var=value
Estoy aprendiendo scripts de bash y encontré esto en mi / usr / share / bash-complete, línea 305:
local cword words=()
¿Qué hace? Todos los tutoriales en línea son solo en el formato
local var=value
Respuestas:
Aunque me gusta la respuesta dada por Jordan , creo que es igualmente importante mostrar a los Linux
usuarios menos experimentados cómo hacer frente a esas preguntas por sí mismos.
La forma sugerida es más rápida y versátil que buscar respuestas en páginas aleatorias que aparecen en la página de resultados de búsqueda de Google.
Primero, todos los comandos que se pueden ejecutar Bash
sin escribir una ruta explícita, como ./command
se pueden dividir en dos categorías: Bash shell builtins
y external commands
. Bash shell builtins
vienen instalados Bash
y son parte de él mientras que external commands
no lo son Bash
. Esto es importante porque Bash shell builtins
están documentados en man bash
su interior y su documentación también se puede invocar con un help
comando, mientras que external commands
generalmente se documentan por su cuenta manpages
o toman algún tipo de -h, --help
bandera. Para verificar si un comando es un Bash shell builtin
o un external command
:
$ type local
local is a shell builtin
Se mostrará how command would be interpreted if used as a command name
(desde help type
). Aquí podemos ver que local
es un shell builtin
. Veamos otro ejemplo:
$ type vim
vim is /usr/bin/vim
Aquí podemos ver que vim
no es un shell builtin
sino un comando externo ubicado en /usr/bin/vim
. Sin embargo, a veces se puede instalar el mismo comando como external command
y shell builtin
al mismo tiempo como a. Agregar -a
a la type
lista de todas las posibilidades, por ejemplo:
$ type -a echo
echo is a shell builtin
echo is /usr/bin/echo
echo is /bin/echo
Aquí podemos ver que echo
es tanto a shell builtin
como a external command
. Sin embargo, si usted acaba de escribir echo
y pulsó Returnuna shell builtin
que se llamaría ya que aparece por primera vez en esta lista. Tenga en cuenta que todas estas versiones de echo
no necesitan ser las mismas. Por ejemplo, en mi sistema /usr/bin/echo
toma --help
bandera mientras builtin
que a no.
Ok, ahora que sabemos que local
es un shell incorporado, veamos cómo funciona:
$ help local
local: local [option] name[=value] ...
Define local variables.
Create a local variable called NAME, and give it VALUE. OPTION can
be any option accepted by `declare'.
Local variables can only be used within a function; they are visible
only to the function where they are defined and its children.
Exit Status:
Returns success unless an invalid option is supplied, an error occurs,
or the shell is not executing a function.
Nota la primera línea: name[=value]
. Todo entre [
y ]
es opcional . Es una convención común utilizada en muchos manpages
y en forma de documentación en el *nix
mundo. Dicho esto, el comando que preguntaste en tu pregunta es perfectamente legal. A su vez, el ...
carácter significa que el argumento anterior puede repetirse. También puede leer sobre esta convención en algunas versiones de man man
:
The following conventions apply to the SYNOPSIS section and can be used
as a guide in other sections.
bold text type exactly as shown.
italic text replace with appropriate argument.
[-abc] any or all arguments within [ ] are optional.
-a|-b options delimited by | cannot be used together.
argument ... argument is repeatable.
[expression] ... entire expression within [ ] is repeatable.
Entonces, al final del día, espero que ahora sea más fácil entender cómo funcionan los diferentes comandos Linux
.
local
también son compatibles ?
man bash
. Una vez allí, escriba /Arrays$
para saltar a la sección de matrices. (El arrastre $
después Arrays
es prevenir ciclismo a través de las referencias en el texto a la sección.) Desde allí se puede escribir f
para ir a la página siguiente o b
para retroceder. Escriba q
para salir de la página del manual cuando haya terminado.
help
sin args enumerará todos los componentes de bash si tiene curiosidad por ver más.
local
simplemente declara que una variable tiene alcance solo en la función definida actualmente, de modo que el entorno de ejecución principal no puede "ver" el valor. No se puede usar local
fuera de una función. Ejemplo
func() {
nonlocal="Non local variable"
local onlyhere="Local variable"
}
func
echo $nonlocal
echo $onlyhere
Salida: variable no local
Entonces $onlyhere
no era visible fuera del alcance de la función.
var=()
, pero supongo que eso es un poco difícil de entender sin siquiera saber el nombre de lo que estás buscando. . ;)