我需要在 bash 中设置一个名为“64bit”(即带有前导数字)的环境变量。但是,bash 变量名不允许使用前导数字的变量。我知道在调用 bash 时设置它的方法:
env 64bit=1 /usr/bin/bash
但是,我正在寻找一种在当前运行的 shell 中更改它的方法,即不是通过启动新的 shell。我也知道 csh 允许变量以数字开头,但我需要使用 bash。
有什么办法可以做到这一点?
我需要在 bash 中设置一个名为“64bit”(即带有前导数字)的环境变量。但是,bash 变量名不允许使用前导数字的变量。我知道在调用 bash 时设置它的方法:
env 64bit=1 /usr/bin/bash
但是,我正在寻找一种在当前运行的 shell 中更改它的方法,即不是通过启动新的 shell。我也知道 csh 允许变量以数字开头,但我需要使用 bash。
有什么办法可以做到这一点?
您还可以绕过 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
正如人们指出的那样,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 并改为按名称调用。