Linux 在bash中设置带前导数字的环境变量

Linux 在bash中设置带前导数字的环境变量,linux,bash,shell,environment-variables,Linux,Bash,Shell,Environment Variables,我需要在bash中设置一个名为“64bit”的环境变量(即带有前导数字)。但是,bash变量名不允许使用前导数字的变量。我知道在调用bash时设置它的方法: env 64bit=1 /usr/bin/bash 然而,我正在寻找一种在当前运行的shell中改变它的方法,即不是启动一个新的shell。我还知道csh允许变量以数字开头,但我需要使用bash 有没有办法做到这一点?正如人们所指出的,Bash不允许变量以数字开头。但是,它会将无法识别的环境字符串传递给外部程序,这就是为什么变量会显示在e

我需要在bash中设置一个名为“64bit”的环境变量(即带有前导数字)。但是,bash变量名不允许使用前导数字的变量。我知道在调用bash时设置它的方法:

env 64bit=1 /usr/bin/bash
然而,我正在寻找一种在当前运行的shell中改变它的方法,即不是启动一个新的shell。我还知道csh允许变量以数字开头,但我需要使用bash


有没有办法做到这一点?

正如人们所指出的,Bash不允许变量以数字开头。但是,它会将无法识别的环境字符串传递给外部程序,这就是为什么变量会显示在
env
中,而不会显示在
set

作为一种解决方法,您可以使用有效的名称,如
\u 64bit
,然后自动将无效的变量名称插入到您运行的命令中:

#!/bin/bash    
# Setup for injection hack
original=$PATH
PATH="/"
command_not_found_handle() {
  PATH="$original" env "64bit=$_64bit" "$@"
}

# Your script and logic
_64bit="some dynamic value"

# This verifies that '64bit' is automatically set
env | grep ^64bit
请注意,只有通过$PATH调用时,此特定方法才有效,而使用相对或绝对路径名时则无效


如果您按路径名调用,请考虑修改路径并按名称调用。 您还可以绕过bash解释器,直接使用bash内部函数定义变量:

$ gdb --batch-silent -ex "attach $$"                              \
    -ex 'set bind_variable("64bit", "1", 0)'                      \
    -ex 'set *(int*)(find_variable("64bit")+sizeof(char*)*5) = 1' \
    -ex 'set array_needs_making = 1'

$ env | grep 64
64bit=1

你为什么需要它?您不能使用其他名称吗?在当前shell中设置环境变量的唯一方法是使用
bash
shell变量,该变量不能以数字开头。我公司的配置管理团队使用该变量,许多脚本正在读取该变量。他们使用csh,但我发现csh在定义函数/别名时非常有限(据我所知,它不支持函数)。所以我切换到使用bash和上面的解决方法,现在我正在尝试修复它。。。IEEE Std 1003.1-2001的Shell和utilities卷中的实用程序所使用的环境变量名称仅由大写字母、数字和可移植字符集中定义的字符中的“u”(下划线)组成,且不以数字开头。实现可能允许使用其他字符;申请应允许存在此类名称。换句话说:告诉你的配置管理人员他们违反了标准。@tink:“…IEEE Std 1003.1-2001的Shell和实用程序卷中的实用程序使用的变量名…”(我的重点)。其他程序可以自由使用他们喜欢的任何字符,这就是为什么
env
更为宽松的原因。+1是我多年来遇到的最疯狂/最聪明的gdb使用。