我想运行以下命令,并将输出在数组中划分的变量中的输出,而不是划分:
files=$( hdfs dfs -ls -R $hdfsDir)
所以我得到的输出就是以下内容: echo $files
drwxr-xr-x - pepeuser supergroup 0 2016-05-27 15:03 /user/some/kpi/2015/01/02 -rw-r--r-- 3 pepeuser supergroup 55107934 2016-05-27 15:02 /user/some/kpi/2015/01/02/part-00000902148 -rw-r--r-- 3 pepeuser supergroup 49225279 2016-05-27 15:02 /user/some/kpi/2015/01/02/part-00001902148
当我在$文件中执行for
而加上每个线路上的整个行时。,我将列代替该行。它的打印如下:
drwxr-xr-x
-
pepeuser
supergroup
以及我在for
上需要的东西以这样打印:
drwxr-xr-x - pepeuser supergroup 0 2016-05-27 15:03 /user/some/kpi/2015/01/02
-rw-r--r-- 3 pepeuser supergroup 55107934 2016-05-27 15:02 /user/some/kpi/2015/01/02/part-00000902148
-rw-r--r-- 3 pepeuser supergroup 49225279 2016-05-27 15:02 /user/some/kpi/2015/01/02/part-00001902148
如果您有bash 4,则可以使用 readarray
:
readarray -t files < <(hdfs dfs -ls -R "$hdfsDir")
否则,请使用read -a
读取数组。IFS=$'n'
将字段分离器设置为newlines,-d ''
告诉它继续阅读,直到它达到一个nul字符:有效地,这意味着它将读取为EOF。
IFS=$'n' read -d '' -r -a files < <(hdfs dfs -ls -R "$hdfsDir")
您可以用以下内容验证数组是否正确填充了:
printf '[%s]n' "${files[@]}"
可以用:
循环在数组上for file in "${files[@]}"; do
echo "$file"
done