代码:
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代替数字,所以我可以遍历它们,但它没有给我想要的结果。有没有办法让这成为可能?
答案 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?