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

时间:2015-09-24 17:58:44

标签: bash filenames

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

但是,我无法为下面的特定案例代码找到一个整洁,简洁和明确的解决方案。虽然this answer建议将分隔符从空格更改为\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

1 个答案:

答案 0 :(得分:3)

要处理包含空格的文件,请编写脚本:

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