bash变量扩展和部分find命令的引用

时间:2016-04-01 01:16:14

标签: bash variable-expansion

我在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下运行脚本。有没有一个很好的方法来处理这个?

1 个答案:

答案 0 :(得分:0)

使用数组。数组可以更好地处理空白。为了更加安全,还可以使用IFS=来保留带有read的前导空格。

FileNames=(-false)
while IFS= read -r FileName; do
    ...
    FileNames+=(-o -iname "$FileName")
    ...
done < "$ListOfFileNames"
find foo -type f \( "${FileNames[@]}" \)