我有一个变量'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
答案 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