我正在尝试做的是在我的应用程序上的bash脚本中模拟一个2D数组。 (我是用bash写它的白痴,但是在我的截止日期之前我有一份工作副本我会重写它)
我要读取的server.data文件:
1:hello:there
2:im:a
3:computing:system
我知道PHP ALOT比bash好,但这里是我的意思的伪代码
foreach(line in server.data) {
arr = explode(":", server.data)
echo arr[0]
echo arr[1]
echo arr[2]
echo \n
}
会返回这些值:
1 hello there
2 im a
3 computing system
有人可以编写一个小的bash脚本,解释如何将每一行放入数组中吗?
答案 0 :(得分:5)
cat server.data |
while read line; do
IFS=:
set - $line
echo $1
echo $2
echo $3
done
答案 1 :(得分:3)
更一般的答案:如果你想模仿php"爆炸"在bash中只有一个字符串(或来自文件的数据),你可以使用类似的东西:
#!/bin/bash
# explode functionality in bash
data="one:two:three:and 4"
echo $data | while read line; do
IFS=:
set - $line
echo $1
echo $2
echo $3
echo $4
done
如果您的数据另一方面来自文件,那么您可以将文件的内容重定向到while循环:
#!/bin/bash
# explode
filename="data"
while read line; do
IFS=:
set - $line
echo $1
echo $2
echo $3
echo $4
done < $filename
此重定向优于cat $filename
进入while循环,因为它不需要分叉另一个进程。
答案 2 :(得分:0)
假设文本文件名为“x.txt”:
#!/bin/bash
for line in `cat x.txt`; do
a[${i}]=$line;
i=$i+1;
done;
echo ${a[0]};
echo ${a[1]};
echo ${a[2]};
答案 3 :(得分:0)
while IFS=: read -a arr; do
echo "${a[@]}"
echo -n "${arr[0]} "
echo -n "${arr[1]} "
echo "${arr[2]}"
done < server.data
echo
语句只是演示了访问数组的一些方法;所有工作都由read -a
完成。
答案 4 :(得分:0)
这为您提供了一个伪二维数组,您可以通过连接每个维度索引来访问各个元素:
while read line
do
((i++))
j=0
IFS=:
for e in $line
do
((j++))
lines["$i$j"]=$e
done
done < data.txt
echo ${lines[@]}
1 hello there 2 im a 3 computing system
echo ${lines[12]}
hello