在shell脚本中使用i ++增加变量计数

时间:2017-08-06 02:48:39

标签: bash shell variables

代码:

website="https://www.test.com/"
item_1="stuff"
item_2="more-stuff"

        while [1]
        do {
            for (i=1; $i<=3; i++)
              do {
                  echo $website$item_$i &
                  sleep 2
                 }
                 done
           }
           done

输出我得到:

https://www.test.com/1
https://www.test.com/2

我想要的输出:

https://www.test.com/stuff
https://www.test.com/more-stuff

我正在尝试增加&#34;项目&#34;变量通过使用$ i代替数字,所以我可以遍历它们,但它没有给我想要的结果。有没有办法让这成为可能?

2 个答案:

答案 0 :(得分:3)

使用item_x变量和inderect variable references

#!/bin/bash

website="https://www.test.com/"
item_1="stuff"
item_2="more-stuff"

while true; do
    for (( i=1; i<=3; i++)); do
       item=item_$i
       echo $website${!item}
       sleep 2
    done
done

要创建间接变量引用,首先我们必须创建一个存储我们想要间接引用的变量名称的变量,因此:

item=item_$i
# item stores the name of the variable we want  to 
# indirectly reference, be it item_1, item_2, etc.

既然我们想要在另一个变量中引用变量的名称,我们使用 inderect reference 来检索变量item的值,而不是存储在该变量中的变量,即item_x

${!item}

因此var item使用${!var}表示法存储我们想要间接引用的变量的名称。

如果使用数组,可能会简单得多:

#!/bin/bash

website=https://www.test.com/
items=( stuff more-stuff )

# You can refer to each item on the array like this:
echo ${items[0]}
echo ${items[1]}

while true; do
    for item in "${items[@]}"; do 
        echo "$website$item"
        sleep 2
    done
done

也可以尝试另一种方式:

#!/bin/bash

website="https://www.test.com/"
item[1]="stuff"
item[2]="more-stuff"

while true; do
   for (( i=1; i<=3; i++)); do
       echo $website${item[i]}
       sleep 2
   done
done

答案 1 :(得分:0)

你可以使用我们所谓的间接参数扩展${!B}其他两个线程正在谈论它。

How to get a variable value if variable name is stored as string?

Dynamic variable names in Bash