使用 bash shell 脚本从 属性 文件中读取多个值

read multiple values from a property file using bash shell script

想使用 shell 脚本从 属性 文件中读取多个值

我的属性文件如下所示,我按照以下方式添加它的原因是为了确保,如果将来有更多学生加入,我只需要在属性文件中添加而不更改 shell 脚本.

student.properties

total_student=6
student_name_1="aaaa"
student_name_2="bbbb"
student_name_3="cccc"
student_name_4="dddd"
student_name_5="eeee"

当我 运行 在脚本下面时,我没有得到所需的输出,用于从属性文件中读取学生姓名

student.sh

#!/bin/bash
. /student.properties

i=1
while [ $i -lt $total_student ]
do
    {
        std_Name=$student_name_$i
        echo $std_Name

        #****** my logic *******

    } || {
        echo "ERROR..."
    }
    i=`expr $i + 1`
done

输出是这样的

1
2
3
4
5

我知道脚本没有得到 $student_name_ 的任何东西,因此只有 $i 值被打印出来。

因此,想知道如何从属性文件中读取值。

您可以使用 ${!foo} 进行变量名插值。如果 $foo"bar",那么 ${!foo} 就是 $bar 的值。在您的代码中,这意味着更改

std_Name=$student_name_$i

var=student_name_$i
std_Name=${!var}

或者,您可以将名称存储在数组中。然后你就不必做任何解析了。

student.properties

student_names=("aaaa" "bbbb" "cccc" "dddd" "eeee")

student.sh

#!/bin/bash
. /student.properties

for student_name in "${student_names[@]}"; do
    ...
done

可以使用间接扩展:

std_Name=student_name_$i
echo "${!std_Name}"

表达式${!var}基本上对变量求值两次:

  1. 第一次评价:student_name_1
  2. 第二次评价:foo

请注意,这是 rarely a good idea 并且几乎总是首选使用数组。