我在Bash脚本中有以下代码:
FileNames=""
while read -r FileName; do
...
FileNames+=" -o -iname \"$FileName\""
...
done <"$ListOfFileNames"
FileNames="${FileNames# -o }"
find foo -type f \( $FileNames \)
这通常对我有用,直到我发现某些文件名包含空格(可能还有其他特殊字符)。当我使用$FileName
添加额外的引用来涵盖这些情况时,$FileNames
命令中find
的扩展开始行为不端。我已经尝试了各种其他引用和转义的方式,并且空洞了。我已经在我编写的许多其他脚本中以其他许多方式成功地使用了变量,但是这个让我感到困惑。我在Cygwin下运行脚本。有没有一个很好的方法来处理这个?
答案 0 :(得分:0)
使用数组。数组可以更好地处理空白。为了更加安全,还可以使用IFS=
来保留带有read
的前导空格。
FileNames=(-false)
while IFS= read -r FileName; do
...
FileNames+=(-o -iname "$FileName")
...
done < "$ListOfFileNames"
find foo -type f \( "${FileNames[@]}" \)