Разное поведение при одинаковом вводе

Есть функция search

search(){
    echo "$1"
    # If directory -> recursion
    # If file and regex ok -> echo
    for file in "$1"/*; do
        ([[ -d "$file" ]] && search "$file" $2 ||
                 if [[ ( -f "$file" ) && ( "$file" =~ $2 ) ]];
                     then
                         echo "$file"
                     fi)
    done
}

Если вызывать ее от параметров командной строки: search "$1" "$2" ./s.sh . *, то вывод будет таким:

> ./s.sh . *
.
./a
./aaa.mp3
./a_directory
./a_directory/aaa.aaa
./a_directory/another_file
./a_directory/b
./alala.txt
./alphabet.txt
./a.sh

Но если вызывать напрямую задавая параметры search "." "*", то вывод окажется:

> ./s.sh . *
.
./a_directory
./a_directory/aaa.aaa
./a_directory/another_file
./a_directory/b

В чем может быть проблема?


Ответы (1 шт):

Автор решения: user7860670

* без кавычек - это глоб, разворачивающийся в список содержимого папки. Cоответственно в первом случае у вас передается не обязательно два аргумента, и второй, даже если и есть, то не будет *.

→ Ссылка