该程序用于从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
答案 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
请注意,我首先使用了short
和long
初始化了short
和long
第一行输入,或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
}
)。