Parece-me que o problema é mais simples de resolver do que parece:
Vamos supor que haja uma maneira de obter a lista, um arquivo por linha.
Para o diretório atual:
list="$(printf '%s\n' *)"
Basta anexar os limites à lista e classificá-lo:
nl='
'
lim1="alpha2"
lim2="deltaA"
echo -- "$list""$nl""$lim1""$nl""$lim2" | sort
Em seguida, inicie a impressão no lim1 (cuidando que lim1 e lim2 não correspondam a um nome de arquivo existente) e pare no lim2.
Além disso, para simplificar, selecione a string mais curta anterior ao arquivo que deseja imprimir e também a string mais curta que ordena logo após o último arquivo que precisa ser selecionado.
O que é útil é uma lista exclusiva (uma que não inclua os limites),
mas ambas as soluções são fornecidas.
Valores básicos:
list="$(printf '%s\n' *)"
lim1=alpha2
lim2=deltaA
Uma solução com o awk para uma lista abrangente:
echo "awk----------------inclusive"
echo "$list""$nl""$lim1""$nl""$lim2" | sort |
awk -v lim1="$lim1" -v lim2="$lim2" '$0==lim1,$0==lim2{print}'
Uma solução com o awk para uma lista exclusiva:
echo "awk----------------exclusive"
echo "$list""$nl""$lim1""$nl""$lim2" | sort |
awk -v lim1="$lim1" -v lim2="$lim2" '$0==lim1{p=1;next};$0==lim2{p=0};p'
Uma solução com o shell para uma lista abrangente:
echo "shell---------------inclusive"
show=0
echo "$list""$nl""$lim1""$nl""$lim2" | sort |
while IFS="$nl" read -r line; do
[ "$line" = "$lim1" ] && show=1
[ "$show" = "1" ] && printf '%s\n' "$line"
[ "$line" = "$lim2" ] && show=0
done
E uma solução exclusiva para o shell:
show=0
echo "$list""$nl""$lim1""$nl""$lim2" | sort |
while read -r line; do
[ "$line" = "$lim2" ] && show=0
[ "$show" = "1" ] && printf '%s\n' "$line"
[ "$line" = "$lim1" ] && show=1
done