我有以下txt文档:
deviceIDs.txt
UDID0=LGH811dec0bfd6
UDID1=41006289e4b2a179
UDID2=d9a7aa45
PORT0=4567
PORT1=4568
PORT2=4569
BOOTPORT0=5556
BOOTPORT1=5557
BOOTPORT2=5558
我希望能够编写以下bash脚本:
#!/bin/bash
source /path/deviceIDs.txt
for ((i=0;i<=2;i++))
do
echo $UDID$i
echo $PORT$i
echo $BOOTPORT$i
done
然而,这并不起作用。可以推测,因为美元符号在一个表达式中被使用了两次。我也尝试使用{}格式化变量,但仍未成功。
答案 0 :(得分:3)
您可以使用bash的间接形式:
#!/bin/bash
source deviceIDs.txt
for ((i=0;i<=2;i++))
do
for x in UDID PORT BOOTPORT
do
y=$x$i
echo ${!y}
done
done
这里的关键是${!y}
返回由y
命名的变量的值。
这会产生输出:
LGH811dec0bfd6
4567
5556
41006289e4b2a179
4568
5557
d9a7aa45
4569
5558
如果允许我们更改数据文件格式,请考虑以这种方式将变量定义为数组:
$ cat IDarrays.txt
UDID=(LGH811dec0bfd6 41006289e4b2a179 d9a7aa45)
PORT=(4567 4568 4569)
BOOTPORT=(5556 5557 5558)
有了这个,脚本可以写成:
#!/bin/bash
source IDarrays.txt
for ((i=0;i<=2;i++))
do
echo ${UDID[$i]}
echo ${PORT[$i]}
echo ${BOOTPORT[$i]}
done
答案 1 :(得分:0)
我不知道John1024的解决方案!
如果您无法修改deviceIDs.txt,因为它是由您无法控制的人生成的,您也可以使用这样的数组:
var i