Следующий пример показывает, что аргументы для find
можно передать через массив в большем количестве ситуаций, чем через строку. Все же оба объекта содержат одну и ту же информацию. Есть ли способ понять это, кроме как сказать «волшебство»?
> 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=*
*
>