我一次又一次地看到Bash在Stack Overflow上使用eval的答案,并且答案得到了抨击,双关语是为了使用这种"邪恶"结构.为什么eval这么邪恶?
如果eval不能安全使用,我应该使用什么呢?
我想声明一个变量,其名称来自另一个变量的值,我编写了以下代码:
a="bbb"
$a="ccc"
Run Code Online (Sandbox Code Playgroud)
但它不起作用.完成这项工作的正确方法是什么?
我有变量$foo="something",想使用:
bar="foo"; echo $($bar)
Run Code Online (Sandbox Code Playgroud)
让某些东西得到回应.
我为这个非常可怕的标题道歉 - 以及质量差的帖子 - 但我基本上想要做的是:
for I in 1 2 3 4
echo $VAR$I # echo the contents of $VAR1, $VAR2, $VAR3, etc.
Run Code Online (Sandbox Code Playgroud)
显然上面的方法不起作用 - 它会(我认为)尝试$VAR$I在Bash中回显一个名为Is this 的变量吗?
假设我将变量的名称存储在另一个变量中:
myvar=123
varname=myvar
Run Code Online (Sandbox Code Playgroud)
现在,我想通过使用$ varname变量得到123.有直接的方法吗?我发现没有这样的bash内置用于按名称查找,所以想出了这个:
function var { v="\$$1"; eval "echo "$v; }
Run Code Online (Sandbox Code Playgroud)
所以
var $varname # gives 123
Run Code Online (Sandbox Code Playgroud)
这最终看起来并不太糟糕,但我想知道我是否错过了一些更明显的东西.提前致谢!