usuario - Caracteres permitidos en nombres de variables de entorno linux
variables de entorno linux bash (5)
De The Open Group :
Estas cadenas tienen el nombre nombre = valor; los nombres no deben contener el caracter ''=''. Para que los valores sean portables en sistemas que cumplan con IEEE Std 1003.1-2001, el valor debe estar compuesto por caracteres del juego de caracteres portátil ( excepto NUL y como se indica a continuación ).
Entonces los nombres pueden contener cualquier caracter excepto = y NUL, pero:
Los nombres de variables de entorno utilizados por las utilidades en el volumen Shell y Utilidades de IEEE Std 1003.1-2001 consisten únicamente en letras mayúsculas, dígitos y ''_'' (guión bajo) de los caracteres definidos en Portable Character Set y no comienzan con un dígito . Otros caracteres pueden ser permitidos por una implementación; las aplicaciones deberán tolerar la presencia de dichos nombres.
Por lo tanto, aunque los nombres pueden ser válidos, es posible que su shell no admita nada más que letras, números y guiones bajos.
¿Qué caracteres están permitidos en los nombres de las variables de entorno de Linux? Mi búsqueda superficial en las páginas de manual y en la web solo produjo información sobre cómo trabajar con variables, pero no qué nombres están permitidos.
Tengo un programa Java que requiere una variable de entorno definida que contiene un punto, como com.example.fancyproperty
. Con Windows puedo establecer esa variable, pero no tuve suerte configurándola en Linux (probado en SuSE y Ubuntu). ¿Ese nombre de variable está permitido?
Depende de lo que quieres decir con ''permitido''.
Ignorando Windows para el nonce:
El entorno es una matriz de cadenas, pasa a la función principal de un programa. Si lee execve (2), no verá requisitos o límites en estas cadenas que no sean la terminación nula.
Por convención, cada cadena consta de NAME = valor. No hay convención de citas, por lo que no puede tener un ''='' en el nombre en esta convención.
Los humanos normales establecen estas cuerdas discutiéndolas con su caparazón. Cada caparazón tiene sus propias ideas de lo que son NAMEs variables válidas, por lo que debe leer la página del manual para el shell-of-the-moment para ver qué piensa.
En general, cosas como com.baseball.spit = fleagh son propiedades del sistema Java, y si algún programa Java está dispuesto o no a recurrir al entorno, es mejor especificarlo con -D.
Depende del caparazón. Supongo que está utilizando bash de manera predeterminada, en cuyo caso se permiten letras, números y guiones bajos, pero no puede comenzar el nombre de la variable con un número. A partir de Bash v.3, los períodos no están permitidos dentro de los nombres de las variables .
Los estándares POSIX en la sección shells del estándar IEEE Std 1003.1-2008 / IEEE POSIX P1003.2 / ISO 9945.2 Shell and Tools no definen la convención léxica para nombres de variables, sin embargo, una mirada superficial look at the source revela que usa algo similar a
[a-zA-Z_]+[a-zA-Z0-9_]*
(Editar: añadido subrayado faltante en la clase del segundo carácter).
Una nota rápida, ya que algunas shells no admiten el + en expresiones regulares, una expresión regular potencialmente más portable puede ser:
[a-zA-Z_]{1,}[a-zA-Z0-9_]{0,}
Mis pruebas rápidas demostraron que básicamente siguen las mismas reglas que los nombres de variables C,
- az, AZ,
_
y 0-9 - NO PUEDE comenzar con un número
Entonces esto excluye .
dentro de ellos. Cualquier nombre de variable ilegal se acredita con unknown command
.
Esto fue probado en ZSH, que es principalmente compatible con BASH.