在Bash中管理子变量
我想在Bash中管理子变量。我可以分配子变量,但我不知道如何使用它:在Bash中管理子变量,bash,loops,variables,variable-assignment,Bash,Loops,Variables,Variable Assignment,我想在Bash中管理子变量。我可以分配子变量,但我不知道如何使用它: #/bin/bash n=1 for lvl in 1 2; do export key$n="${RANDOM:0:2}" let n=$n+1 done for num in 1 2; do echo $key$num done 如果我使用echo$key$num,它将打印变量$num的数字序列,而不是使用数组的随机数 for n in 1 2; do key[n]="${RANDOM:
#/bin/bash
n=1
for lvl in 1 2;
do
export key$n="${RANDOM:0:2}"
let n=$n+1
done
for num in 1 2; do
echo $key$num
done
如果我使用echo$key$num
,它将打印变量$num
的数字序列,而不是使用数组的随机数
for n in 1 2; do
key[n]="${RANDOM:0:2}"
done
for num in 1 2; do
echo "${key[num]}"
done
看
此外,在bash中,从0开始计算通常比从1开始计算更好,并且不需要导出变量,除非您想运行其他程序在继承的环境中查找变量。使用数组
for n in 1 2; do
key[n]="${RANDOM:0:2}"
done
for num in 1 2; do
echo "${key[num]}"
done
看
此外,在bash中,从0开始计算通常比从1开始计算更好,并且不需要导出变量,除非您想运行其他程序在继承的环境中查找变量。您可以使用数组(请参见@MarkReed),或者使用声明:
for n in 1 2; do
declare -- key$n="${RANDOM:0:2}"
done
for n in 1 2; do
v=$(declare -p key$n) ; v="${v#*=}" ; echo "${v//\"/}"
done
使用相同的函数:
key_set () # n val
{
declare -g -- key$1=$2
}
key_get () # n
{
local v=$(declare -p key$1) ; v="${v#*=}" ; echo "${v//\"/}"
}
for n in 1 2; do
key_set $n "${RANDOM:0:2}"
done
for n in 1 2; do
key_get $n
done
您可以使用数组(请参见@MarkReed),也可以使用声明:
for n in 1 2; do
declare -- key$n="${RANDOM:0:2}"
done
for n in 1 2; do
v=$(declare -p key$n) ; v="${v#*=}" ; echo "${v//\"/}"
done
使用相同的函数:
key_set () # n val
{
declare -g -- key$1=$2
}
key_get () # n
{
local v=$(declare -p key$1) ; v="${v#*=}" ; echo "${v//\"/}"
}
for n in 1 2; do
key_set $n "${RANDOM:0:2}"
done
for n in 1 2; do
key_get $n
done
您还可以使用printf
:printf-v键$n'%s'${RANDOM:0:2}“
。要检索它,可以使用间接扩展:v=key$n;v=${!v}
(这是OP缺少的部分)。我真的不喜欢你的key\u get
函数:不要使用declare-p
:你在使用一个子shell,那么你需要解析字符串v
来删除(错误地)引号(这里没问题,但你的方法不是通用的:如果字段中有引号,它将失败). 而使用间接扩展将更优雅、高效和稳健地解决所有这些问题;我只是想和declare试一下。。。间接扩展更好,数组更多。您还可以使用printf
:printf-v键$n'%s'${RANDOM:0:2}“
。要检索它,可以使用间接扩展:v=key$n;v=${!v}
(这是OP缺少的部分)。我真的不喜欢你的key\u get
函数:不要使用declare-p
:你在使用一个子shell,那么你需要解析字符串v
来删除(错误地)引号(这里没问题,但你的方法不是通用的:如果字段中有引号,它将失败). 而使用间接扩展将更优雅、高效和稳健地解决所有这些问题;我只是想和declare试一下。。。间接扩展更好,阵列甚至更多。