在while循环中将空格分隔成数组

时间:2018-04-16 07:39:29

标签: arrays bash while-loop spaces ifs

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

我有以下内容,为了简单起见,我用简单的回声替换了比较,因为它不是比较出错:

background-image: url('/images/myimage.png');

stat返回一个字符串列表(在本例中为3个值),在这种情况下都使用我的用户名,但read只是将其作为单个读取和字符串输出。

while IFS=' ' read -ra own; do echo ${own[@]}; done <<< $(stat -c %U file*.*)

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

我已改为IFS =和IFS =&#39; \ t&#39;如果我以某种方式误读了stat的输出,但即使我只是定义一个类似&#34的字符串,我也会得到相同的行为。我在这里&#34;而不是stat命令,所以我显然做了别的错误。

哦,我确实也需要一行声明,所以如果那是问题那么我想我有点搞砸了。

1 个答案:

答案 0 :(得分:1)

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

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

另一种方法是:

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

请注意,您不需要while循环,因为您可以在一行中获取所有内容。