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

时间:2013-03-19 19:07:01

标签: linux bash shell environment-variables

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

env 64bit=1 /usr/bin/bash

但是,我正在寻找一种在当前运行的shell中更改它的方法,即不是通过启动新shell。我也知道csh允许变量以数字开头,但我需要使用bash。

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:8)

您也可以绕过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

答案 1 :(得分:1)

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

作为一种变通方法,您可以使用有效名称_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调用时有效,而不是在使用相对路径名或绝对路径名时。

如果您通过路径名调用,请考虑修改PATH并按名称调用。