如何在 Bash 脚本中使用双引号处理文件名中的空格

How to handle spaces in filenames using double quotes in a Bash script

我们的 Debian 服务器上有一个脚本 运行,它可以抓取目录中的文件名并将它们推送到我们的 API。当文件名没有 space 时它运行良好。这个常见问题的通常答案是在变量名周围使用双引号。

但是,我无法为我们的特定案例找到一个整洁、简短和明确的解决方案——代码如下。尽管 this answer 建议将分隔符从 space 更改为 \n,但我宁愿在现有代码中使用双引号方法。

这是代码的相关部分:

files=("$(ls $directory)") #$directory has the files we want to loop through

if [ ${#files[@]} -gt 0 ]; then
    getToken
    for i in $files
    do
        echo "$i"
        uploadFiles "$i"
    done
    exit
else
    echo "No files to upload"
    exit
fi

要处理其中包含空格的文件,请按如下方式编写脚本:

shopt -s nullglob
files=("$directory"/*)

for i in "${files[@]}"
do  
  echo "$i"
  uploadFiles "$i"
done

或者如果你不需要保留数组,你可以这样做

shopt -s nullglob

for i in "$directory"/*
do  
  echo "$i"
  uploadFiles "$i"
done