可移植地为动态命名的 shell 变量赋值

可移植地为动态命名的 shell 变量赋值

Slackware 14.2 上的 Almquist shell 支持以下结构,但 Debian 的 Almquist shell 不支持。其他类似 Bourne 的 shell 则不然。

setvar "$varname" <...>

Bash 显然有能力动态创建变量名

declare "magic_variable_$1=$(ls | tail -1)"

$1我认为虽然......(=想到)中可以出现的角色有一些限制。

建议将此作为 4.0 之前的 Bash 中伪造关联数组的解决方法。

我可以想出一个愚蠢的函数,用于使用eval.

注意:请勿以任何理由使用此功能,它完全不安全。

assign_dynamically() {
    eval "$1='$2'"
}

但是,如果该值$2包含'并且不支持空格或元字符$1,那么这个东西就会阻塞,所以它不是一个解决方案。

是否有一种可移植/POSIX 兼容的方法来编写一个函数,该函数可以分配$2给一个名为的变量,$1而不管任一字符串的内容如何?

答案1

无论任何一个字符串,都不是。第一个参数必须是有效的变量名。

dynamic_assign(){ eval "$1"=\"\$2\" ; }

大约是你能得到的一样好

相关内容