设置环境变量在Bash中领先的数字(Setting environment variable wit

2019-08-17 18:15发布

我需要在bash设置名为“64”的环境变量(即与一家领先的数字)。 然而,bash的变量名禁止拥有国内领先的数字的变量。 我知道一种方法调用庆典时设置:

env 64bit=1 /usr/bin/bash

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

有什么办法来实现这一目标?

Answer 1:

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


Answer 2:

随着人们指出,猛砸不允许变量起始位。 它不会对无法识别的环境字符串传递但是外部程序,这就是为什么变量显示出来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调用,而不是如果你使用相对或绝对路径名称这种特殊的方法只适用。

如果通过调用路径,考虑修改名称和路径,而不是调用。



文章来源: Setting environment variable with leading digit in bash