Почему массив bash работает как параметры для поиска, а строка - нет? - PullRequest
1 голос
/ 22 октября 2019

Следующий пример показывает, что аргументы для 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=*
*
>

...