在bash中,如何将顶级dirs存储在一个数组中进行后处理?



我试图在子目录中获得我的顶级目录列表,因此我可以对它们进行post处理,例如,删除某些目录。我有

# List the top-level dirs and create an array with the resul
DIRS=`ls -1`
IFS=$'n' read -ra TOP_DIRS <<< "$DIRS"
# Iterate the array
for D in "${TOP_DIRS[@]}"; do
# For now, just echo the dirs
echo $D
done

ls -1命令给出如下示例

00 PRM - AUTO GA
00 PRM - AUTO GA Prod
00 PRM - AUTO GA Prod@script
00 PRM - AUTO GA Prod@script@tmp
00 PRM - AUTO GA STG
00 PRM - AUTO GA STG@script
00 PRM - AUTO GA STG@script@tmp
但是,for循环只回显第一个值,即
$ ./clean_workspace.sh 
00 PRM - AUTO GA

显然我的IFS声明是错误的。我错过了什么?蒂娅!

不需要ls。只需在数组文字中使用通配符。

top_dirs=(*)

顺便说一句,使用大写的变量名是不好的风格。这些通常为环境变量保留。

只是解决为什么OP的当前代码只处理一个目录的问题…

read被设计为读取单行输入,因此OP的当前代码只读取并存储第一个目录:

$ IFS=$'n' read -ra TOP_DIRS <<< "$DIRS"
$ typeset -p TOP_DIRS
declare -a TOP_DIRS=([0]="00 PRM - AUTO GA")

mapfile设计用于处理多行输入,将每个存储在一个新的数组项中,例如:

$ mapfile -t TOP_DIRS <<< "$DIRS"
$ typeset -p TOP_DIRS
declare -a TOP_DIRS=([0]="00 PRM - AUTO GA" [1]="00 PRM - AUTO GA Prod" [2]="00 PRM - AUTO GA Prod@script" [3]="00 PRM - AUTO GA Prod@script@tmp" [4]="00 PRM - AUTO GA STG" [5]="00 PRM - AUTO GA STG@script" [6]="00 PRM - AUTO GA STG@script@tmp")

注意:这并没有否定为什么你不应该尝试解析ls

的注释/链接。

相关内容

  • 没有找到相关文章

最新更新