Arrays 为什么bash数组可以作为查找选项,而字符串却不能?

Arrays 为什么bash数组可以作为查找选项,而字符串却不能?,arrays,string,bash,find,Arrays,String,Bash,Find,下面的示例显示,与通过字符串提供参数相比,在更多的情况下,可以通过数组为find提供参数。然而,这两个对象包含相同的信息。除了说“魔术”之外,还有什么办法可以理解这一点吗 启用set-x以查看shell看到的内容,然后重试。这将很有启发性。shell在替换变量之前解析引号和转义符,因此使用纯字符串无法控制变量内容的分词和通配符扩展。请参阅、等。启用set-x以查看shell所看到的内容,然后重试。这将很有启发性。shell在替换变量之前解析引号和转义符,因此使用纯字符串无法控制变量内容的分词和通

下面的示例显示,与通过字符串提供参数相比,在更多的情况下,可以通过数组为
find
提供参数。然而,这两个对象包含相同的信息。除了说“魔术”之外,还有什么办法可以理解这一点吗


启用
set-x
以查看shell看到的内容,然后重试。这将很有启发性。shell在替换变量之前解析引号和转义符,因此使用纯字符串无法控制变量内容的分词和通配符扩展。请参阅、等。启用
set-x
以查看shell所看到的内容,然后重试。这将很有启发性。shell在替换变量之前解析引号和转义符,因此使用纯字符串无法控制变量内容的分词和通配符扩展。见、等。
> bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin18)
Copyright (C) 2007 Free Software Foundation, Inc.
> 
> set -f
> find . -not -name '.*' -not -name *[[:space:]]*
./z
./okay
> xstring=' . -not -name '.*' -not -name *[[:space:]]* '
> find ${xstring}
./z
./okay
> find $xstring
./z
./okay
> find . -name *$'\n'*
./newlineBEF
newlineAFT
> xstring=" . -name *$'\n'* "
> find ${xstring}
> xarray=( . -name *$'\n'* )
> find "${xarray[@]}"
./newlineBEF
newlineAFT
> 
> for foo in ${xstring}; do printf 'foo=%s\n' "${foo}"; done
foo=.
foo=-name
foo=*$'\n'*
> for foo in "${xarray[@]}"; do printf 'foo=%s\n' "${foo}"; done
foo=.
foo=-name
foo=*
*
>