名称中带有空格的文件

名称中带有空格的文件

我有一个名为 var 的变量,用于存储目录中的文件列表。我循环遍历所有文件,如果找到目录,我会将“目录”输出到屏幕上。代码如下:

var=$(ls dir)

for file in $var; do
    if [ -d $dir/$file ]; then
        echo "Directory"
    fi
done

我有两个问题:

1st- 我在函数内部执行此操作,并且我希望 $file 变量保持本地状态,这样当我的函数结束时,我就无法访问它。我该如何将该变量设置为本地变量?我无法做到,for local file in $var;也无法在循环之前声明 $file。

$(ls dir)第二,当包含名称中有空格的文件时,我的循环不起作用。例如,如果$dir有 3 个文件,文件 1、文件 2 和文件 3,$var则只会将文件 1 和文件 3 保留为真实文件,但文件 2 不起作用,因为它会将其分为文件和文件 2。我该如何解决文件名称中有空格的问题?

答案1

为了使 $file 本地化:您可以local file在分配给它之前使用。

对于有空格的文件:不解析 ls,使用通配符,并使用双引号将变量引用引起来:

local file
for file in "$dir"/*; do  # Note that $file will contain $dir as well as the filename
    if [ -d "$file" ]; then
        echo "Directory: $file"
    fi
done

如果要在开始循环之前存储文件名,请使用数组而不是普通变量:

local -a filelist
filelist=("$dir"/*)
local file
for file in "${filelist[@]}"; do
    ...

BashFAQ #20:“如何查找并安全地处理包含换行符、空格或两者的文件名?”了解更复杂的例子和更多的技巧。

相关内容