如何在 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
我们的 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