如果我有这样的文件:
A:a
B:b
C:c
我需要创建2个数组,如
one=('A' 'B' 'C')
two=('a' 'b' 'c')
我怎样才能在bash中做到这一点?
我试过这个:
declare -a one
declare -a two
while read line
do
IFS=':' read -ra ADDR <<< $line
echo ${ADDR[0]}
echo ${ADDR[1]}
done < file.txt
抱歉,我下班了,然后回家了。再次抱歉。这个问题是它正在打印
littlelion:Documents dierre$ sh prova.sh
A a
B b
所以它缺少C c,我不知道如何将元素添加到数组
答案 0 :(得分:3)
引用修复所有内容:
while read line
do
IFS=':' read -ra ADDR <<< "$line"
echo ${ADDR[0]}
echo ${ADDR[1]}
done < file.txt
引用变量"$line"
是有所作为的。如果您没有使用“C:c”,那可能是因为您的文件缺少最终换行符。
答案 1 :(得分:0)
declare -a one
declare -a two
one=( $(cut -d: -f1 file) )
two=( $(cut -d: -f2 file) )
var=$(command)
捕获命令的输出并将其分配给var
。外部的parens使它成为一个数组赋值。 cut -d: -f1
表示将文件视为冒号分隔文件并打印第一个字段。 cut -d: -f2
执行相同的操作但会打印第二个字段。
编辑以响应OP的编辑
您可以直接阅读ADDR
:
declare -a ADDR
while IFS=':' read -a ADDR; do
echo ${ADDR[0]}
echo ${ADDR[1]}
done < file.txt
虽然这不会填充数组one
和two
...
答案 2 :(得分:0)
如果我理解你正在尝试做什么,这应该有效:
one=()
two=()
while IFS=: read new_one new_two || [ -n "$new_one" ]; do
one+=("$new_one")
two+=("$new_two")
done
echo "one:" "${one[@]}"
echo "two:" "${two[@]}"
注意:我同意@Dennis Williamson的最后一行没有被处理,因为它没有以换行结束;我添加了|| [ -n "$new_one" ]
位以防止此问题。