如何迭代顺序编号的环境变量?

问题描述 投票:0回答:1

我有一个需要1到20个变量的应用程序。每个变量的名称相同,只是它们以序号结尾。从_1_20

例如:Value_1, Value_2, Value_3...Value_20

我想做的是:

  1. 请先查看变量是否存在。可能只有一个变量,也可能有20个。此外,不能保证它们具有特定的顺序。例如,可能仅存在Value_15。
  2. 对于以Value_开头的变量,我想检查一下它们是否为null。
  3. 对于那些非空或空的变量,我想获取它们的值并将其输入另一个进程。

我听说使用数组可能是一种方法。但是我必须将找到的变量转换为数组...或我可以从1 ... 20对其进行交互,看看它们是否存在,并为其分配了值,我可以从每个值中提取值。

最佳方法是什么?

linux bash loops variables
1个回答
0
投票

Bash使用例如var_$i(其中$i是数字),您可以分配创建的模式(例如tmp="var_$i"),然后使用var_x从生成的${!tmp}名称中获取值,例如

#!/bin/bash

var_1=1
var_2=2
var_4=4
var_5=5
var_6=6
var_8=8
var_9=9
var_10=10
var_11=11
var_13=13
var_14=14
var_15=15
var_16=16
var_18=18
var_19=19

for ((i = 1; i <= 20; i++)); do
    tmp="var_$i"
    if [ -n "${!tmp}" ]; then
        printf "var_%d exits: %s\n" "$i" "${!tmp}"
    fi
done

自4.3起,它已并入bash的nameref声明中。您可以选择declare -n tmp=var_x声明一个nameref,例如

for ((i = 1; i <= 20; i++)); do
    declare -n tmp="var_$i"
    if [ -n "$tmp" ]; then
        printf "var_%d exits: %s\n" "$i" "$tmp"
    fi
done

尝试一下,如果您有任何疑问,请告诉我。

示例使用/输出

在两种情况下,您都会收到:

$ bash nameref.sh
var_1 exits: 1
var_2 exits: 2
var_4 exits: 4
var_5 exits: 5
var_6 exits: 6
var_8 exits: 8
var_9 exits: 9
var_10 exits: 10
var_11 exits: 11
var_13 exits: 13
var_14 exits: 14
var_15 exits: 15
var_16 exits: 16
var_18 exits: 18
var_19 exits: 19
© www.soinside.com 2019 - 2024. All rights reserved.