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\" ; }
大约是你能得到的一样好