【问题标题】:How to create a dynamic variable and assign value to it?如何创建动态变量并为其赋值?
【发布时间】:2013-08-02 14:00:53
【问题描述】:

我正在尝试创建一个动态变量并将100 分配给它

#!/bin/bash
.
.   
active_id=$p_val 
flag_$active_id=100

但是我在这样做时遇到了错误,有什么帮助吗?

【问题讨论】:

标签: linux bash shell


【解决方案1】:

您可以像这样使用 bash 的声明指令和间接功能

p_val="foo"
active_id=$p_val
declare "flag_$active_id"="100"

测试:

> set | grep flag
flag_foo=100

更新:

p_val="foo"
active_id="$p_val"
v="flag_$active_id"
declare "$v"="100"

> echo "$v"
flag_foo
> echo "${!v}"
100

if condition中的用法:

if [ "${!v}" -ne 100 ]; then
   echo "yes"
else
   echo "no"
fi

# prints no

【讨论】:

  • 感谢 anubhava,但我在这段代码中遇到错误:if [ flag_$active_id -ne 100 ] then ... else ...
  • @ShivamAgrawal:检查我的 Update 部分,我提供了一个在 if then ... else ... fi 块中使用的示例。
  • 这里分号有什么意义 "if [ "${!v}" -ne 100 ];"
  • "${!v}" 被称为间接,这意味着真正的变量名包含在$v (flag_foo)中
  • 这不适用于分配数组。解决方案在这里:stackoverflow.com/a/16487405/3779853
【解决方案2】:

我不知道这应该有什么好处,但是您可以使用 bash 的 eval 语句来实现这样的目标。

以下代码说明了这一点。

#!/bin/bash

p_val="TEST"
active_id=$p_val 

eval "flag_$active_id=100"

echo $flag_TEST
eval "echo \$flag_$active_id"

终止echo的puts

100
100

stdout

【讨论】:

  • 只是一个友好的警告,虽然这会起作用,但 eval 是超级危险的,特别是在 shell 上。所以永远不要使用来自用户输入的任何内容。永远。
猜你喜欢
  • 2015-02-15
  • 1970-01-01
  • 2016-04-28
  • 1970-01-01
  • 2012-06-29
  • 2018-07-29
  • 1970-01-01
  • 2016-01-24
  • 2023-03-21
相关资源
最近更新 更多