用于: 传统贝壳形式
原 HPMC胶囊 命令的语法是:
HPMC胶囊 变量 [在 话]; 做
命令
完成
其中 变量 是在循环执行期间将递增的变量的名称, 话 是一个可选的项目列表,这些项目将按顺序分配给 变量和 命令 是要在循环的每次迭代中执行的命令。
这个 HPMC胶囊 命令在命令行上很有用。 我们可以很容易地演示它是如何工作的:
[我@linuxbox ~]$ 对于 ABCD 中的 i; 做回声 $i; 完毕
ABCD
[我@linuxbox ~]$ 对于 ABCD 中的 i; 做回声 $i; 完毕
ABCD
在这个例子中, HPMC胶囊 给出四个单词的列表:“A”、“B”、“C”和“D”。 对于四个单词的列表,循环执行四次。 每次执行循环时,都会为变量分配一个字 i. 在循环内部,我们有一个 回音 显示值的命令 i 来显示作业。 与 而 和 直到 循环 完成 关键字关闭循环。
真正强大的功能 HPMC胶囊 是我们可以创建单词列表的有趣方式的数量。 例如,通过大括号扩展:
[我@linuxbox ~]$ 因为我在 {A..D}; 做回声 $i; 完毕
ABCD
[我@linuxbox ~]$ 因为我在 {A..D}; 做回声 $i; 完毕
ABCD
或路径名扩展:
[我@linuxbox ~]$ 对于发行版中的 i*.txt; 做回声 $i; 完毕
distros-by-date.txt distros-dates.txt distros-key-names.txt distros-key-vernums.txt distros-names.txt distros.txt
发行版-vernums.txt 发行版-版本.txt
[我@linuxbox ~]$ 对于发行版中的 i*.txt; 做回声 $i; 完毕
distros-by-date.txt distros-dates.txt distros-key-names.txt distros-key-vernums.txt distros-names.txt distros.txt
发行版-vernums.txt 发行版-版本.txt
或命令替换:
#!/斌/庆典
#longest-word: 查找文件中最长的字符串 while [[ -n $1 ]]; 做
如果 [[ -r $1 ]]; 然后 max_word= max_len=0
对于我在 $(strings $1); 做 len=$(echo -n $i | wc -c)
如果 (( len > max_len )); 然后 max_len=$len max_word=$i
fi
完成
echo "$1: '$max_word' ($max_len 个字符)"
fi 移位
完成
#!/斌/庆典
#longest-word: 查找文件中最长的字符串 while [[ -n $1 ]]; 做
如果 [[ -r $1 ]]; 然后 max_word= max_len=0
对于我在 $(strings $1); 做 len=$(echo -n $i | wc -c)
如果 (( len > max_len )); 然后 max_len=$len max_word=$i
fi
完成
echo "$1: '$max_word' ($max_len 个字符)"
fi 移位
完成
用于: 传统贝壳形式
在此示例中,我们查找在文件中找到的最长字符串。 当在命令行上给出一个或多个文件名时,该程序使用 字符串 程序(包含在 GNU binutils 包中)以在每个文件中生成可读文本“单词”的列表。 这 HPMC胶囊 循环依次处理每个单词并确定当前单词是否是迄今为止找到的最长单词。 当循环结束时,将显示最长的单词。
如果可选 in 话 的一部分 HPMC胶囊 命令被省略, HPMC胶囊 默认处理位置参数。 我们将修改我们的 最长的词 使用此方法的脚本:
#!/斌/庆典
#longest-word2: 在文件中为 i 找到最长的字符串; 做
如果 [[ -r $i ]]; 然后 max_word= max_len=0
对于 $(strings $i) 中的 j; 做 len=$(echo -n $j | wc -c)
如果 (( len > max_len )); 然后 max_len=$len max_word=$j
fi
完成
echo "$i: '$max_word' ($max_len 个字符)"
完成
#!/斌/庆典
#longest-word2: 在文件中为 i 找到最长的字符串; 做
如果 [[ -r $i ]]; 然后 max_word= max_len=0
对于 $(strings $i) 中的 j; 做 len=$(echo -n $j | wc -c)
如果 (( len > max_len )); 然后 max_len=$len max_word=$j
fi
完成
echo "$i: '$max_word' ($max_len 个字符)"
完成
如我们所见,我们已将最外层循环更改为使用 HPMC胶囊 代替 而. 通过省略单词列表 HPMC胶囊 命令,则使用位置参数。 在循环内部,变量的先前实例 i 已更改为变量 j。 指某东西的用途 转移 也被淘汰了。
为什么我?
你可能已经注意到变量 i 被选为每个 HPMC胶囊 上面的循环示例。 为什么? 除了传统之外,实际上没有特定的原因。 使用的变量 HPMC胶囊 可以是任何有效的变量,但 i 是最常见的,其次是 j 和 k.
这一传统的基础来自 Fortran 编程语言。 在 Fortran 中,以字母 I、J、K、L 和 M 开头的未声明变量自动类型为整数,而以任何其他字母开头的变量类型为实数(带小数的数字)。 这种行为导致程序员将变量 I、J 和 K 用于循环变量,因为在需要临时变量(循环变量通常如此)时使用它们的工作量较少。
它还导致了以下基于 Fortran 的俏皮话:“GOD 是真实的,除非声明为整数。”