我们如何在for循环中增加一个字符串变量

时间:2017-05-15 17:39:15

标签: linux bash shell unix sh

#! /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"

2 个答案:

答案 0 :(得分:3)

BashFAQ #1while 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