在stdin中查找最长和最短的字符串

时间:2015-02-17 00:32:48

标签: bash shell

该程序用于从stdin读取文件并返回最长和最短的行。现在它处于一个无限循环中。有人能告诉我我做错了什么吗?

更新:所以在阅读了更多关于读取的内容之后,它实际上是正确的(我是)但是我想将分隔符设置为换行符,而当前读取命令在每个空格字符处都带有一个字符串。有谁知道我能做什么?

read T
short=""
long=""
for i in $T; do
   if [[ $short = "" ]]; then
       short=$i
   elif [[ ${#i} -lt ${#short} ]]; then
      short=$i
   elif [[ ${#i} -gt ${#long} ]];then
      long=$i
   fi
done
echo $short
echo $long

1 个答案:

答案 0 :(得分:1)

它不可能达到无限循环,因为你循环遍历a 必然是有限变量($T)。

我将假设你的脚本是“悬挂”并假设 其中一个可能的原因(为您提供一个可能的原因 解决你的课堂问题):脚本正在睡觉 等待来自stdin的数据,没有数据发送给他。

以下是您可以做的事情:

read short
long=$short
while read line; do
    if [[ ${#line} -lt ${#short} ]]; then
        short=$line
    fi
    if [[ ${#line} -gt ${#long} ]]; then
        long=$line
    fi
done
echo $short
echo $long

请注意,我首先使用了shortlong初始化了shortlong 第一行输入,或stdin的EOF上的空字符串。然后我尝试 在while循环中读取更多行,然后检查更新elif和更新的条件 <form method="post"> <table style="width: 100%"> <tr> <td style="width: 15%">Naam medicament</td> <td colspan="5" style="width: 85%"> <input list="medicament" name="medicament" autocomplete="false"> <datalist id="medicament" style="width: 50%"> <?php foreach($allMedicament as $medicament) { echo "<option value=\"", $medicament, "\">", $medicament, "</option>" ; } ?> </datalist> </td> </tr> </table> </form> ;重要的是不排除行大小检查(如果有) 它们适用(就像你没有在你的脚本中使用if (isset($_POST["medicament"])) { // this stuff is always executed, even when the user didnt enter or select anything in the datalist } )。