Bash for循环不是';t以预期的方式在阵列中循环
我有一个变量“roles”,其中包含以下数据: 构造器、解构器、转换器 我在一个数组中循环,我想在角色信息旁边附加一个用户名变量,但我得到了“坏”结果:Bash for循环不是';t以预期的方式在阵列中循环,bash,loops,Bash,Loops,我有一个变量“roles”,其中包含以下数据: 构造器、解构器、转换器 我在一个数组中循环,我想在角色信息旁边附加一个用户名变量,但我得到了“坏”结果: echo $roles echo "$roles" array=$(echo "$roles" | tr "," "\n") for i in $array do echo $user_id - "$i" done 然而,我的输出结果如下: Constructor,Deconstructor,
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
array=$(echo“$roles”| tr”,“\n”)
不创建数组
它创建三行文本
您需要array=($(echo“$roles”| tr“,”\n”)
,但如果任何字段包含空格,则无法正常工作
比这更好的是使用:
IFS=, read -a array <<< "$roles"
IFS=,read-a数组array=$(echo“$roles”| tr”,“\n”)
不创建数组
它创建三行文本
您需要array=($(echo“$roles”| tr“,”\n”)
,但如果任何字段包含空格,则无法正常工作
比这更好的是使用:
IFS=, read -a array <<< "$roles"
IFS=,read-a array尝试此操作,并用空格替换每个逗号:
roles="Constructor,Deconstructor,Transformer"
user_id="bman"
for i in ${roles//,/ }; do echo "$user_id $i"; done
输出:
bman Constructor
bman Deconstructor
bman Transformer
bman构造函数
解构器
bman变压器
尝试此操作并用空格替换每个逗号:
roles="Constructor,Deconstructor,Transformer"
user_id="bman"
for i in ${roles//,/ }; do echo "$user_id $i"; done
输出:
bman Constructor
bman Deconstructor
bman Transformer
bman构造函数
解构器
bman变压器
它在我的BASH上工作得很好。它在我的BASH上工作得很好。如果有空格的字段,我如何让它工作?@ ChpEnter我在写的中间,但是用代码中的文字新行测试$$ < /代码>给我带来麻烦。@ USS329 9633 ChpEnter的版本将与空格字段一起工作。虽然显然不是字面上的新行,但我现在有点被这个事实难住了;当字符串中嵌入了换行符时,您需要使用readarray-t我应该澄清我的困惑是使用-d'
是在从“$roles”
读取的最后一个字段的末尾抛出一个额外的换行符。“代码>读取/代码>停止的事实并不是问题。如果有空格的字段,我如何使它工作?@ ChpEnter我在写的中间,但是用代码中的文字换行来测试。$角色< /代码>给我带来麻烦。@ USS329 9633 ChpEnter的版本将与空格字段一起工作。虽然显然不是字面上的新行,但我现在有点被这个事实难住了;当字符串中嵌入了换行符时,您需要使用readarray-t我应该澄清我的困惑是使用-d'
是在从“$roles”
读取的最后一个字段的末尾抛出一个额外的换行符。read
以其他方式停止的事实不是问题所在。