Linux 列出当前文件夹中的子文件夹的bash不';t给出预期结果[仅给出第一个文件夹]
我尝试列出子文件夹并将它们作为列表保存到变量中Linux 列出当前文件夹中的子文件夹的bash不';t给出预期结果[仅给出第一个文件夹],linux,bash,Linux,Bash,我尝试列出子文件夹并将它们作为列表保存到变量中 DIRS=($(find . -maxdepth 1 -mindepth 1 -type d )) 之后,我想在子文件夹中做一些工作。i、 e for item in $DIRS do echo $item 但之后 echo $DIRS 它只给出第一项(子文件夹)。有人能指出错误或提出其他解决方案吗?下面创建了一个bash数组,但只列出了三个子目录中的一个子目录: $ dirs=($(find . -maxdepth 1 -min
DIRS=($(find . -maxdepth 1 -mindepth 1 -type d ))
之后,我想在子文件夹中做一些工作。i、 e
for item in $DIRS
do
echo $item
但之后
echo $DIRS
它只给出第一项(子文件夹)。有人能指出错误或提出其他解决方案吗?下面创建了一个bash数组,但只列出了三个子目录中的一个子目录:
$ dirs=($(find . -maxdepth 1 -mindepth 1 -type d ))
$ echo $dirs
./subdir2
要查看所有目录,必须使用[@]
或[*]
下标形式:
$ echo "${dirs[@]}"
./subdir2 ./subdir1 ./subdir3
或者,在循环中使用它:
$ for item in "${dirs[@]}"; do echo $item; done
./subdir2
./subdir1
./subdir3
避免分词问题
注意,在上面的代码中,shell在创建数组之前执行单词拆分。因此,如果任何子目录的名称中有空格,这种方法将失败
dirs=(*/)
find
,并且希望它对于较难的文件名是安全的,那么请使用find的--exec
选项$dirs
只返回数组的第一个元素。这在manbash
中有记录:
引用不带下标的数组变量等同于引用下标为0的数组
[@]
和[*]
的使用也记录在man bash
中:
数组的任何元素都可以使用${name[subscript]}引用。需要大括号以避免与路径名扩展冲突。如果下标为@或,则该词将扩展到name的所有成员。只有当单词出现在双引号内时,这些下标才会不同。如果单词是双引号,${name[]}将展开为单个单词,每个数组成员的值由IFS特殊变量的第一个字符分隔,${name[@]}将name的每个元素展开为一个单独的单词
同时尝试引用这两个变量。回显未报价的$DIR将删除换行符。