我正在为一个变量数组运行一个循环,生成另外三个变量。
IE
for foo in ${bar[@]};
do bar1=$(echo $foo | awk '{print$1}');
bar2=$(echo $foo | awk '{print$2}');
bar3=$(echo $foo | awk '{print$3}');
done
然而,当循环完成后,我需要三个新创建的变量本身成为数组,我也可以在其上运行 for 循环。
IE
for foo in ${bar1[@]}
do echo $foo
done
^^^^这应该显示多行。
有人能提供任何办法来实现这一点吗?
答案1
使用
bar1+=($(echo $foo | awk '{print$1}'))
即, 向数组添加一个值。当然代码为variable+=( value )
使用该bar1
数组必须看起来像
for foo in "${bar1[@]}"
do
echo "$foo"
done
当然,您应该始终引用 shell 变量(例如"$foo"
和"${bar1[@]}"
),除非您有充分的理由不这样做,并且您当然你知道你在做什么。
答案2
这里不需要三个管道;只需用于read
从字符串中提取前三个字段。
for foo in "${bar[@]}"; do
read bar1 bar2 bar3 the_rest <<< "$foo"
done
the_rest
foo
仅当有可能是“abc d”之类的内容并且您不想bar3
设置为 时才有必要c d
。