¿Problema de alcance? - La declaración variable se pierde cuando DON desde dentro de un bloque de origen, dentro de una función de bash -- bash campo con source camp askubuntu Relacionados El problema

Scope problem? - variable declaration is lost when don from within a sourced block, inside a bash function


2
vote

problema

Español

enfrentando un problema para el que me estoy quedando sin respuestas. Limpié mi problema a una versión más sencilla para el ejemplo del ejemplo:

Tengo un archivo llamado datasource , con los siguientes contenidos:

  $ cat datasource declare X="Hello, world" $   

y la función Foo declarada como:

  ABCDEFGHIJKLMNABCDEFGHIJKLMN5   

Cuando obtengo la fuente de datos del contexto actual, se declara X; Cuando lo hago a través de foo, no lo es.

  $ # next result is expected $ unset X $ declare -p X bash: declare: X: not found $ $ # next result is expected $ . ./datasource $ declare -p X declare -- X="Hello, world" $ $ # next result is NOT expected $ unset X $ foo $ declare -p X bash: declare: X: not found $   

¿Alguna idea de por qué?

Estoy ejecutando Ubuntu LTS 18.04 y Bash 5.0.17

Original en ingles

Facing an issue for which am running out of answers. I stripped my issue to a simpler version for the purpose of the example:

I have a file called datasource, with the following contents:

$ cat datasource declare X="Hello, world" $ 

and the function foo declared as:

$ function foo( ) {   . ./datasource } 

When I source datasource from the current context, X is declared; when I do it via foo, is not.

$ # next result is expected $ unset X $ declare -p X bash: declare: X: not found $ $ # next result is expected $ . ./datasource $ declare -p X declare -- X="Hello, world" $ $ # next result is NOT expected $ unset X $ foo $ declare -p X bash: declare: X: not found $ 

Any idea why?

I am running Ubuntu LTS 18.04 and bash 5.0.17

     

Lista de respuestas

2
 
vote
vote
La mejor respuesta
 

Debe usar declare -g para hacer la variable global. ABCDEFGHIJKLMNABCDEFGHIJKLMN3 DICE:

Cuando se usa en una función, declara hace nombres locales, al igual que con el local mando. La opción abcdefghijklmn-g suprime este comportamiento.

 

You need to use declare -g to make the variable global. help declare says:

When used in a function, declare makes NAMEs local, as with the local command. The -g option suppresses this behavior.

 
 
 
 

Relacionados problema

0  Quiero tener una fuente del último kernel para descargarlo en Ubuntu 12.04  ( I want to have a source of the latest kernel to download it on ubuntu 12 04 ) 
Tengo Ubuntu 12.04 LTS, y quiero descargar los últimos encabezados de Linux de Synaptic. Pero necesito una fuente. ...

0  Instalar git de la fuente  ( Install git from source ) 
Estoy intentando instalar Git de la fuente para usar la última versión de GIT. http://git-scm.com/book/en/ Inicio-instalado-GIT $ tar -zxf git-2.0.1.ta...

0  "./Configure: comando no encontrado" Error al intentar instalar el jre [duplicado]  ( Configure command not found error when trying to install the jre ) 
Esta pregunta ya tiene respuestas aquí : ¿Cómo puedo instalar el sol / Java JAVA JAVA JDK 6/7/8 o JR...

2  3.0.0-13-Lowlatency-Pae, ¿dónde puedo encontrar su fuente?  ( 3 0 0 13 lowlatency pae where can i find its source ) 
Sé que para otra publicación que usa apt-get source linux-image-$(uname -r) Puedo obtener la fuente del kernel, pero estoy usando el kernel 3.0.0-13-lo...

1  SH: 2: Fuente: No encontrado  ( Sh 2 source not found ) 
Estoy teniendo un problema con la instalación de la armización en Ubuntu 14.04 He seguido este enlace y todo es okey. http://www.darkoperator.com/installing-...

5  ¿Dónde conseguir aegisub?  ( Where to get aegisub ) 
¿Dónde puedo obtener nuevos aegisub? Los representantes de Ubuntu solo tienen 2.1.9, lo cual es muy cochecito (no es compatible con minúsculas cirílicas, es u...

1  Línea mal formada en mi lista de fuentes, ¿cómo resolver?  ( Malformed line in my sources list how to resolve ) 
Antes de empezar, he intentado la solución de este hilo ¿Cómo quito una línea malformada De mis fuentes. Lista? Pero, lamentablemente, los pasos realiza...

3  ¿Cómo construir un paquete de origen?  ( How to build a source package ) 
Soy el desarrollador principal de un software de código abierto llamado gdevelop ( https://github.com/4ian/ GD ): Me gustaría distribuirlo en Ubuntu y me bene...

3  ¿Cómo puedo modificar el kernel cuando ya tengo Ubuntu corriendo en mi máquina?  ( How can i modify the kernel when i already have ubuntu running on my machine ) 
Lo siento si esta es una pregunta extremadamente estúpida, pero soy nuevo en Linux y me gustaría intentar averiguar cómo modificar mi propio sistema. Desde lo...

0  /configure comando ya no está disponible  ( Configure command no longer available ) 
Al instalar Apache, MySQL, PHP de Fuente ./configure ya no hace un comando. ¿Cuál es el reemplazo para ./configure en Ubuntu 13.10? ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos