如何创建动态变量并为其赋值?

Shi*_*wal 12 linux bash shell

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

#!/bin/bash
.
.   
active_id=$p_val 
flag_$active_id=100
Run Code Online (Sandbox Code Playgroud)

但是我这样做会有错误,有什么帮助吗?

anu*_*ava 20

您可以使用bash的declare指令和间接功能,如下所示:

p_val="foo"
active_id=$p_val
declare "flag_$active_id"="100"
Run Code Online (Sandbox Code Playgroud)

测试:

> set | grep flag
flag_foo=100
Run Code Online (Sandbox Code Playgroud)

更新:

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

> echo "$v"
flag_foo
> echo "${!v}"
100
Run Code Online (Sandbox Code Playgroud)

用法if condition:

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

# prints no
Run Code Online (Sandbox Code Playgroud)

  • `"$ {!v}"`被称为间接,这意味着真实的变量名称包含在`$ v`(`flag_foo`)中 (2认同)

use*_*332 5

我不知道这应该是什么好处,但你可以用bash的eval声明来实现这样的东西.

以下代码说明了这一点.

#!/bin/bash

p_val="TEST"
active_id=$p_val 

eval "flag_$active_id=100"

echo $flag_TEST
eval "echo \$flag_$active_id"
Run Code Online (Sandbox Code Playgroud)

该终端echo的看跌期权

100
100
Run Code Online (Sandbox Code Playgroud)

在...上stdout.