Первый блок итерирует (неявно) по аргументам командной строки "$@"
for i in "$@" # same as your "for i"
do
echo "$i"
done
Второй блок итерирует явно по количеству аргументов, печатая индекс по мере выполнения:
args=$# # number of command line args
for (( i=1; i<=$args; i+=1 )) # loop from 1 to N (where N is number of args)
do
echo $i
done
Учитывая, что, согласно вашему примеру, $#
равно 5, то переменная $i
будет принимать значения 1
, 2
, 3
, 4
, 5
.
Как указано в другом (теперь удаленном) ответе, вы можете ссылаться на аргументы командной строки по индексу следующим образом:
args=$#
for (( i=1; i<=$args; i++ ))
do
echo "$i - ${!i}"
done
ripgrep принимает пути к файлам в качестве аргументов. Так что просто передайте свои файлы в качестве аргументов:
rg pattern file1 file2...
Если ваш список находится в файле с одним путем в строке, используйте xargs:
xargs -d '\n' -a list-file rg pattern
Или, если это список, сгенерированный из find
, то:
find./... -print0 | xargs -0 rg pattern