如何将多个选项发送到一个变量

如何将多个选项发送到一个变量

我正在为一个变量数组运行一个循环,生成另外三个变量。

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_restfoo仅当有可能是“abc d”之类的内容并且您不想bar3设置为 时才有必要c d

相关内容