Bash for循环不会以预期的方式绕过数组

时间:2015-06-17 17:59:38

标签: bash loops

我有一个变量'roles',其中包含以下数据:

构造,拆解,变压器

我在数组中盘旋,我想在角色信息旁边添加一个用户名变量,但我得到的结果是'糟糕':

   echo $roles
   echo "$roles" 
   array=$(echo "$roles" | tr "," "\n")
   for i in $array
   do
      echo $user_id - "$i"
   done

我的输出结果如下:

Constructor,Deconstructor,Transformer
Constructor,Deconstructor,Transformer
bman - Constructor
Deconstructor
Transformer

输出应该如下所示:

bman - Constructor
bman - Deconstructor
bman - Transformer

2 个答案:

答案 0 :(得分:3)

array=$(echo "$roles" | tr "," "\n")不会创建数组。

它会创建三行文字。

您想要array=($(echo "$roles" | tr "," "\n")),但如果任何字段包含空格,则无法正常工作。

比使用更好:

IFS=, read -a array <<< "$roles"

对于包含空格的字段是安全的。

同样$array不是你从数组中获取所有元素的方式。为此,请使用"${array[@]}"

答案 1 :(得分:1)

尝试这个并用空格替换每个逗号:

roles="Constructor,Deconstructor,Transformer"
user_id="bman"
for i in ${roles//,/ }; do echo "$user_id $i"; done

输出:

bman Constructor
bman Deconstructor
bman Transformer