Когда вы вызываете программу
testscript *.txt
, ваша оболочка выполняет раскрытие и обрабатывает все значения. Таким образом, она может эффективно называть вашу программу как
testscript file1.txt file2.txt file3.txt file4.txt
. Теперь ваша программа смотрит только на $ 1
и поэтому работает только с file1.txt
.
Цитируя в командной строке, вы передаете в сценарий буквальную строку *. Txt
, и это то, что хранится в $ 1
. Ваш цикл for
затем расширяет его.
Обычно в таких сценариях используется "$ @"
, а не $ 1
.
Это ошибка для людей, пришедших из сценариев CMD, где командная оболочка не выполняет подстановки (как это известно) и всегда передает буквальную строку.