Bash数组打印,但一次只能打印23行。
好的,我正试图符合一个项目的一些标准。我一次只能打印23行。我已经将一个目录的文件输入到一个数组中,并且知道如何将其打印出来Bash数组打印,但一次只能打印23行。,bash,Bash,好的,我正试图符合一个项目的一些标准。我一次只能打印23行。我已经将一个目录的文件输入到一个数组中,并且知道如何将其打印出来 LIST=(`ls`) len=${#LIST[*]} i=0 while [ $i -lt $len ]; do echo "$i: ${LIST[$i]}" let i++ done 我试图只允许它一次打印23个项目,然后请求用户输入继续
LIST=(`ls`)
len=${#LIST[*]}
i=0
while [ $i -lt $len ]; do
echo "$i: ${LIST[$i]}"
let i++
done
我试图只允许它一次打印23个项目,然后请求用户输入继续
read -n1 -rsp $'Press any key to continue \n'
然后用户将键入他们要使用的文件的编号
有什么想法吗?看起来是这样的:
LIST=(`ls`)
len=${#LIST[*]}
i=1
而[$i-lt$len]
做
回显“$i:${LIST[$i]}”
如果[`expr$i%23`==0]
然后
读取-n1-rsp$'按任意键继续\n'
fi
让我++
完成
i、 e.你的条件是:
if[`expr$i%23`==0]
然后
. . .
fi
另请注意,i=1
原因0%N
始终为零如下所示:
LIST=(`ls`)
len=${#LIST[*]}
i=1
而[$i-lt$len]
做
回显“$i:${LIST[$i]}”
如果[`expr$i%23`==0]
然后
读取-n1-rsp$'按任意键继续\n'
fi
让我++
完成
i、 e.你的条件是:
if[`expr$i%23`==0]
然后
. . .
fi
另请注意,
i=1
原因0%N
始终为零您可以使用此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
n=22
arr=(*)
对于((i=0;i),可以使用以下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
n=22
arr=(*)
对于((i=0;i只需将其拆分为双循环
还要注意,不要在脚本中使用ls
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
LIST=(*)
len=“${#LIST[@]}”
对于((i=0;i 1]]&&read-n1-rsp$'按任意键继续\n'
对于((j=0,k=i;j只需将其拆分为双循环
还要注意,不要在脚本中使用ls
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
LIST=(*)
len=“${#LIST[@]}”
对于((i=0;i 1]]&&read-n1-rsp$'按任意键继续\n'
对于((j=0,k=i;j),此处可以使用printf
命令代替循环
tmp=( "${LINES[@]}" )
start=1
while (( ${#tmp[@]} -gt 0 )); do
printf "%s\n" "${tmp[@]:0:23}" | nl -v $start
tmp=( "${tmp[@]:23}" )
((start+=23))
read -n1 -rsp $'Press any key to continue \n'
done
tmp
用于避免不必要地破坏行
。printf
以及tmp
上的子字符串扩展操作符用于通过管道一次打印23行
用于编号的nl
。start
变量可用于连续对行进行编号,而不是将每批打印为第1-23行。此处可使用printf
命令代替循环
tmp=( "${LINES[@]}" )
start=1
while (( ${#tmp[@]} -gt 0 )); do
printf "%s\n" "${tmp[@]:0:23}" | nl -v $start
tmp=( "${tmp[@]:23}" )
((start+=23))
read -n1 -rsp $'Press any key to continue \n'
done
tmp
用于避免不必要地破坏行
。printf
以及tmp
上的子字符串扩展操作符用于通过管道一次打印23行
nl
用于编号。可以使用start
变量连续对行进行编号,而不是将每批打印为第1-23行。这太漂亮了,我甚至从未想过将其暂停为23次。谢谢!我正在搜索,如果[`expr($I+1))有什么方法可以做到吗%23`==0}若要说明从0开始的数组,请在使用expr
时,在图形之间放置空格(是的,它们是参数),在您的情况下,它将是expr\($i+1\)%23
再次感谢您,我想可能是这样的,但在谷歌上搜索示例时遇到了困难expr
对于bash
(或任何POSIX外壳)中的算术是不需要的。if[$((i%23))-eq 0]
以实现完全的POSIX兼容性,或者只是if((i%23==0))
在bash
中。这太漂亮了,我从来没有想过要暂停23次。谢谢!我现在正在搜索,如果[`expr($I+1)%23`==0}来解释从0开始的数组,有什么方法吗?当使用expr
时,在数组之间放置空格(是的,它们是参数),对于你来说应该是expr\($i+1\)%23再次感谢您,我想可能是这样,但在谷歌上搜索示例时遇到了困难expr
对于bash
(或任何POSIX外壳)中的算术都不需要。如果[$((i%23))-eq 0]
实现完全的POSIX兼容性,或者只是if((i%23==0))
在bash
中。您需要使用数组吗?不要像这样使用ls
。LIST=(*)
。您需要使用数组吗?不要像这样使用ls
。LIST=(*)
。