在 while 循环中读取 space 分隔的字符串到数组中
Reading space seperated string into array in while loop
我想在所有者中读取文件列表,然后将其与当前所有者进行比较,如果不相同则输出错误。
我有以下内容,为了简单起见,我用简单的回显替换了比较,因为出错的不是比较:
while IFS=' ' read -ra own; do echo ${own[@]}; done <<< $(stat -c %U file*.*)
stat returns 一个字符串列表(在本例中为 3 个值),在本例中均包含我的用户名,但读取仅将其作为单个读取和字符串输出。
<myusername> <myusername> <myusername>
澄清:我的意思是循环只处理一次,返回包含所有 3 个值的字符串,而我想要循环的 3 次迭代,每次迭代包含一个值。
我已经更改为 IFS= 和 IFS='\t' 以防我以某种方式误读了 stat 的输出,但即使我只是定义了一个字符串 "I am here" 而不是 stat 命令,所以我显然做错了其他事情。
哦,我也确实需要在一行语句中使用它,所以如果这是问题所在,那么我想我有点搞砸了。
为了获取数组的每个元素,您可以使用 for
循环遍历变量 own
:
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
循环,因为您可以在一行中获取所有内容。
我想在所有者中读取文件列表,然后将其与当前所有者进行比较,如果不相同则输出错误。
我有以下内容,为了简单起见,我用简单的回显替换了比较,因为出错的不是比较:
while IFS=' ' read -ra own; do echo ${own[@]}; done <<< $(stat -c %U file*.*)
stat returns 一个字符串列表(在本例中为 3 个值),在本例中均包含我的用户名,但读取仅将其作为单个读取和字符串输出。
<myusername> <myusername> <myusername>
澄清:我的意思是循环只处理一次,返回包含所有 3 个值的字符串,而我想要循环的 3 次迭代,每次迭代包含一个值。
我已经更改为 IFS= 和 IFS='\t' 以防我以某种方式误读了 stat 的输出,但即使我只是定义了一个字符串 "I am here" 而不是 stat 命令,所以我显然做错了其他事情。
哦,我也确实需要在一行语句中使用它,所以如果这是问题所在,那么我想我有点搞砸了。
为了获取数组的每个元素,您可以使用 for
循环遍历变量 own
:
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
循环,因为您可以在一行中获取所有内容。