0

我正在尝试运行以下脚本:

#!/bin/sh
. ./test.prop

for ((i=0; i<10;i++)
do
    echo $F($i)
done  

它来源的文件包含参数分配:

F1=20
F2=30
F3=40
.
.
.

脚本的期望输出将是

10
20
30
40
.
.
.

什么是正确的语法$F($i)?还是我不能简单地使用它?

4

4 回答 4

3

您可以使用间接参数扩展:

for ((i=0; i<10; i++)); do
    f="F$i"
    echo "${!f}"
done
于 2012-10-02T18:01:04.940 回答
3

为什么不使用数组?

F=(10 20 30 ...)

for i in {0..9}; do
    echo ${F[i]}
done  
于 2012-10-02T18:02:23.533 回答
2

您可能应该使用eval

eval "echo \$F$i"

eval 用于评估然后运行命令,允许您动态生成命令。通过转义第一个美元符号,它在生成的命令中显式使用,而注意转义第二个美元符号允许我们将其值扩展为用于生成变量名称的数字。所以假设$i包含值“1”,生成的命令是echo $F1

希望这会有所帮助=)

于 2012-10-02T18:01:12.320 回答
1

您可以使用 grep 命令:

grep ^F prop.test | awk -F= '{print $2}'

这将 grep 所有以 . 开头的行F并打印=.

于 2012-10-02T18:01:12.420 回答