运行bash命令,然后按线将输出分开,而不是按空间划分



我想运行以下命令,并将输出在数组中划分的变量中的输出,而不是划分:

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

最新更新