Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash for循环不是';t以预期的方式在阵列中循环_Bash_Loops - Fatal编程技术网

Bash for循环不是';t以预期的方式在阵列中循环

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,

我有一个变量“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
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
以其他方式停止的事实不是问题所在。