#! /bin/bash
for i in $(ls);
do
j=1
echo "$i"
不期望输出: -
autodeploy
bin
config
console-ext
edit.lok
需要输出如下如果输入2它应该打印" bin"基于以下条件,但我想像目录列表
1.)autodeploy
2.)bin
3.)config
4.)console-ext
5.)edit.lok
如果我喜欢输入: - 2那么它应该打印"bin"
答案 0 :(得分:3)
按BashFAQ #1,while read
循环是逐行阅读内容的正确方法:
#!/usr/bin/env bash
enumerate() {
local line i
i=0
while IFS= read -r line; do
((++i))
printf '%d.) %s\n' "$i" "$line"
done
}
ls | enumerate
但是,ls
不是程序化使用的合适工具;如果ls
的结果仅用于人类消费,则上述情况是可以接受的,但如果它们将由机器解析则不可接受 - 请参阅Why you shouldn't parse the output of ls
(1)。
如果要列出文件并让用户按编号选择,请将glob表达式的结果传递给select
:
select filename in *; do
echo "$filename" && break
done
答案 1 :(得分:0)
我不明白你的问题是什么意思和目录列表,但是按照你的例子,你不需要写一个循环:
<select id="selected_pie" class="search" onchange="if (this.selectedIndex) update_pie();">
<option id="options"></option>
</select>
如果你想避免 ls ,你可以做以下事情(但要小心 - 这只有在目录条目不包含空格时才有效(因为这会使 fmt 将它们分成两行):
ls|nl -s '.)' -w 1