Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.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
Arrays 在while循环中将空格分隔的字符串读入数组_Arrays_Bash_While Loop_Spaces_Ifs - Fatal编程技术网

Arrays 在while循环中将空格分隔的字符串读入数组

Arrays 在while循环中将空格分隔的字符串读入数组,arrays,bash,while-loop,spaces,ifs,Arrays,Bash,While Loop,Spaces,Ifs,我想在所有者中读取文件列表,然后将其与当前所有者进行比较,如果不相同,则输出一个错误 我有以下内容,为了简单起见,我用一个简单的回音替换了比较,因为不是比较出了问题: while IFS=' ' read -ra own; do echo ${own[@]}; done <<< $(stat -c %U file*.*) 在本例中,stat返回一个字符串列表3个值,在本例中所有值都带有我的用户名,但read只将其作为单个read and字符串输出 <myusername

我想在所有者中读取文件列表,然后将其与当前所有者进行比较,如果不相同,则输出一个错误

我有以下内容,为了简单起见,我用一个简单的回音替换了比较,因为不是比较出了问题:

while IFS=' ' read -ra own; do echo ${own[@]}; done <<< $(stat -c %U file*.*)
在本例中,stat返回一个字符串列表3个值,在本例中所有值都带有我的用户名,但read只将其作为单个read and字符串输出

<myusername> <myusername> <myusername>
澄清:我的意思是循环只处理一次,返回包含所有3个值的字符串,而我想要循环的3次迭代,每次包含一个值

我已经改为IFS=和IFS='\t',以防我以某种方式误读stat的输出,但即使我只是像这里这样定义一个字符串而不是stat命令,我也会得到相同的行为,所以我显然在做其他错误的事情


哦,我也需要它在一行语句中,所以如果这是问题所在,那么我想我有点搞砸了

为了获得数组的每个元素,可以使用for循环遍历变量own:

另一种方法是:

{ read -ra own; for i in ${own[@]}; do echo $i; done; } <<< $(stat -c %U file*.*)

请注意,您不需要while循环,因为所有内容都在一条线上

read-a在数组中指定自己的值。通过使用${own[@]}可以在一行中获得所有数组元素。这是正确的行为。。。你到底期待什么?@oliv我想我误解了我应该期待的。我希望每次读取一个值,而不是一次读取所有值。循环只返回一个值,其中包含所有3个值,而不是返回3个值。也就是说,循环只处理一次,而不是我想要的3次;do echo${own}:;更具体地说,只是为了明确迭代次数:而read-r是自己的;做ct++;echo${own}:${ct};done@urbanespaceman答案已更新,但在纯bash中进行字符串操作可能会导致问题。如果你想进一步描述一下你想用stat的结果做什么,那么像sed或awk这样的文本处理工具很可能会做得更好!谢谢@oliv。它最多只能读取6个文件,如果发现任何不属于当前用户的文件,它将返回错误状态,即将${own[@]}与$whoami进行比较,如果它们不相同,则退出1
{ read -ra own; for i in ${own[@]}; do echo $i; done; } <<< $(stat -c %U file*.*)