Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 列出当前文件夹中的子文件夹的bash不';t给出预期结果[仅给出第一个文件夹]_Linux_Bash - Fatal编程技术网

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将删除换行符。