Odpowiedź jest bardzo prosta, zostałeś zaatakowany przez coś co się nazywa shell expansion.
Wyjaśnienie:
Mamy drzewo plików takie jak to:
.
├── a
│ ├── bar.txt
│ └── foo.txt
├── b
│ ├── bar.txt
│ └── foo.txt
├── bar.txt
├── c
│ ├── bar.txt
│ └── foo.txt
├── echo.sh
├── find.sh
└── foo.txt
3 directories, 10 files
Skrypt echo.sh
:
#!/bin/bash
set -x
echo "$@"
Wywołanie ./echo *.txt
:
bar.txt foo.txt
Więc jak widzisz Twój zapis *.txt
został przez powłokę rozwinięty do bar.txt foo.txt
. Z racji, że bierzesz tylko pierwszy argument, to Twoje wywołanie find brzmi wtedy find -name bar.txt
zamiast oczekiwanego find -name "*.txt"
. By temu zapobiec masz 2 wyjścia:
- Escape gwiazdki:
./script \*.txt
- Użyć cudzysłowów:
./script "*.txt"