/ / Wydruk tablicy Bash, ale tylko 23 linie na raz. - bash

Wydruk tablicy Bash, ale tylko 23 linie na raz. - bash

Dobra, staram się dostosować do niektórych standardów projektu. Mogę drukować tylko 23 linie na raz. Dostarczałem pliki katalogu do tablicy i wiem, jak je wydrukować.

        LIST=(`ls`)
len=${#LIST[*]}
i=0
while [ $i -lt $len ]; do
echo "$i: ${LIST[$i]}"
let i++
done

Próbuję tylko pozwolić na wydrukowanie 23 elementów jednocześnie, a następnie poprosić o wprowadzenie danych użytkownika, aby kontynuować,

         read -n1 -rsp $"Press any key to continue n"

Następnie użytkownik wpisze numer pliku, którego chce użyć.

Jakieś pomysły?

Odpowiedzi:

3 dla odpowiedzi № 1

Na to wygląda:

LIST=(`ls`)
len=${#LIST[*]}
i=1
while [ $i -lt $len ]
do
echo "$i: ${LIST[$i]}"
if [ `expr $i % 23` == 0 ]
then
read -n1 -rsp $"Press any key to continue n"
fi
let i++
done

tj. warunkujesz umieszczenie w:

if [ `expr $i % 23` == 0 ]
then
. . .
fi

również pamiętać i=1 przyczyna 0 % N zawsze daje zero


2 dla odpowiedzi nr 2

Możesz użyć tego skryptu BASH:

n=22
arr=(*)
for ((i=0; i<=${#arr[@]}; i+=n)); do
echo "${arr[@]:$i:$n}"
read -n1 -p "Press any key to continue..."
done

0 dla odpowiedzi № 3

Po prostu podziel go na dwie pętle.

Zauważ też, nie używaj ls w skryptach.

LIST=( * )
len="${#LIST[@]}"
for((i=0; i<$len; i+=23)); do
[[ $i > 1 ]] && read -n1 -rsp $"Press any key to continue n"
for((j=0, k=i; j<23 && k<$len; ++j, ++k)); do
echo "[$i + $j] $k: ${LIST[$k]}"
done
done

0 dla odpowiedzi nr 4

The printf komenda może być użyta zamiast pętli tutaj.

tmp=( "${LINES[@]}" )
start=1
while (( ${#tmp[@]} -gt 0 )); do
printf "%sn" "${tmp[@]:0:23}" | nl -v $start
tmp=( "${tmp[@]:23}" )
((start+=23))
read -n1 -rsp $"Press any key to continue n"
done

tmp jest używany, aby uniknąć zniszczenia LINES niepotrzebnie. The printf wraz z operatorem rozszerzenia podciągów tmp służy do drukowania 23 linii na raz, przesyłanych strumieniowo nl do numerowania. The start zmienna może być używana do numerowania linii w sposób ciągły, zamiast drukowania każdej partii jako linii 1–23.