Je veux définir une variable d'environnement dans bash, qui commence à partir d'un chiffre. L'environnement du processus peut contenir de telles variables (ça ne fait pas attention). Mais dans le shell, vous devez créer les variables, puis les exporter pour qu'elles se retrouvent dans l'environnement. Y a-t-il un moyen de mettre de la valeur dans l'environnement du shell sans toucher aux variables, ou peut-être créer une variable qui commence par un chiffre?bash evironment variables à partir d'un chiffre
Répondre
Les seuls types de caractères de début valides pour les variables bash sont les lettres et les traits de soulignement.
C'est vrai pour les variables. Mais l'environnement de traitement ne s'en soucie pas. Maintenant, comment le mettre là sans restrictions de bash variable? – valeryz
@valeryz: vous devez manipuler l'environnement dans un programme C et utiliser 'execve()' pour le relayer vers bash. Ce n'est pas pratique ou raisonnable. Vous pouvez également créer plusieurs entrées pour une seule variable de cette façon - ce qui n'est pas pratique ou raisonnable non plus. –
Pourquoi voulez-vous faire cela? Vous pouvez faire:
export _1="some value"
ou
export a1="some value"
La raison pour laquelle vous ne pouvez pas faire ce que vous demandez est qu'une variable comme « $ 1 » serait confondu avec le paramètre de position $1
.
Parce que je le fais dans Cygwin pour WinDDK 'build' utilitaire, qui veut une variable '386'. Je comprends les raisons pour lesquelles cela ne fonctionne pas comme vous le dites. – valeryz
La seule façon que je pouvais penser était en lançant un nouveau shell en utilisant env
:
env 0FOO=BAR /usr/bin/bash
J'ai essayé sous Cygwin et il semblait travailler.
C'est gentil, merci! J'ai trouvé que je pourrais passer à bash 4.1, mais votre approche devrait fonctionner n'importe où, un processus de bash supplémentaire est bon pour moi. – valeryz
Clever; Je me demande si c'est un bug ou une fonctionnalité dans 'env'. –
Comme le souligne @valeryz, il n'y a pas les mêmes restrictions sur les identifiants dans le bloc d'environnement de processus (IAFAIK - si quelqu'un en a vu, s'il vous plaît commenter) comme il y a dans les variables bash. Puisque env ne viole pas les règles de bash pour les variables bash (il les contourne complètement), cette utilisation me semble cacher. –
Le traitement nécessaire est fastidieux et fastidieux et non terriblement sensible, mais (dans les grandes lignes, les contrôles d'erreur sur malloc()
omis):
char **env = environ;
while (*env != 0)
*env++;
char **newenv = malloc((env - environ + 1) * sizeof(*newenv));
memcpy(newenv, environ, (env - environ) * sizeof(char *));
newenv[env - environ] = "386=pygmalion";
newenv[env - environ + 1] = 0;
char *args[] = { "modded-env-bash", 0 };
execve("/bin/bash", args, newenv);
exit(1);
Pourquoi putenv() ou setenv() ne fonctionnerait-il pas? – valeryz
Cela nécessite une programmation personnalisée (bien que le nom et la valeur de l'env var puissent être collectés à partir de la ligne de commande), et n'est pas aussi simple que l'utilisation du programme 'env' proposé par Bert F. –
@valeryz: Ils pourraient - ils pourraient ne pas. Il y a une chance décente 'putenv()' fonctionnera, mais cela pourrait vérifier ce que vous fournissez; il y a une chance décente 'setenv()' ne fonctionnera pas car il prend le nom et la valeur séparément et pourrait valider le nom (bien que POSIX ne dise que les signes '=' ne sont pas autorisés, tout le reste semble juste).OK, réécrivez le code pour utiliser 'setenv()' ... amusez-vous. Mieux vaut utiliser la commande 'env' si cela fonctionne là où vous en avez besoin. –
- 1. Comment définir les variables d'environnement bash à partir d'un script?
- 2. Est-il possible de construire des noms de variables à partir d'autres variables dans bash?
- 3. Passer des variables bash à ssh
- 4. variables passer de htaccess à script bash
- 5. liste Pass des variables à script bash
- 6. shell Bash variables de script
- 7. boucle avec bash de variables
- 8. Variables Bash prédéfinies avec arguments
- 9. Comment exécuter des commandes de script à partir de variables?
- 10. bash: expansion des variables avec des espaces
- 11. bash Linux: affectation de variables multiples
- 12. BASH Variables avec plusieurs commandes et réentrantes
- 13. Bash: Variables d'accès aux sous-processus
- 14. Bash écrire dans un fichier (variables?)
- 15. Copie de fichiers Bash avec des variables
- 16. Appeler make à partir d'un script bash ne fera pas
- 17. Création de variables variables à partir de valeurs MySQL
- 18. Comment donner des variables JavaScript à partir de variables ASP.NET?
- 19. Initialisation de variables dynamiques (variables variables) dans le script shell bash
- 20. GLatLngBound à partir de variables en javascript
- 21. Affecter des variables à partir de Split
- 22. Impossible de définir les variables dans le script bash
- 23. Exécuter la commande à partir des variables du script shell
- 24. comment lire le numéro et l'imprimer chiffre par chiffre
- 25. chiffre mod_rewrite va
- 26. Luhn chiffre de contrôle
- 27. Bash Multiplication Decimal à int
- 28. Chiffre d'église pour l'addition
- 29. Tri des colonnes csv en bash, lire la sortie de bash en variables python
- 30. chiffre César dans VC#
OK, je pense que je l'ai trouvé la réponse dans bash-4.1 changelog: Bash passe maintenant les variables d'environnement avec des noms qui ne sont pas valides les noms des variables shell dans l'environnement transmis aux fils fils. Juste besoin de mettre à niveau. – valeryz
On dirait que le changement 4.1 signifie que si j'ai une variable 386 = 1 dans mon processus parent, quand je bifurque, il ne l'efface pas, et il sera disponible pour les enfants. – valeryz