我一直在为Uni做一个bash编程任务,一切正常,除了Automark软件(黑盒子)给我一个0/5 ..我联系了我的Uni讲师,他回复说:
“似乎有一些关于”从标准输入读取“的含义的混淆。这意味着你从终端的键盘读取而不是从命令行读取....这个错误在histo(之前的程序)中。也似乎是在histoplot。(程序我在这里谈论)“
现在我没有想法,这意味着什么。我已经浏览了整个互联网,我认为我的代码是从标准输入读取的。
这不是“Read Read Line”吗?我的程序获取数据并将其转换为如下所示的Histoplot:
1 1
2 3
3 2
4 1
并将其变为:
1 #
2 ###
3 ##
4 #
这是我的代码(抱歉有这么多):
#!/bin/bash
addWordcount=0
customHash=0
customHashchoice="#"
scale=0
for i in $*
do
if [[ $i = "-c" ]]
then
addWordcount=1
elif [[ $i = "-p" ]]
then
customHash=1
elif [[ $i = "-s" ]]
then
scale=1
fi
done
for x in $*
do
if [ -f $x ] ; then
while read line
do
lineAmnt=${line% *}
hashNo=${line##* }
for ((i=0; i<hashNo; i++))
do
hashes+="#"
#hashNumber=$(expr $hashNumber - 1)
done
printf "%3s" $lineAmnt
if [[ $addWordcount -eq 1 ]]
then
printf "%5s"$hashNo
fi
printf " $hashes\n"
hashes=""
done < $x
fi
done
答案 0 :(得分:2)
while read line
从stdin读取,但您使用了重定向。通过编写while read line; do ... done < $x
,您将使用$ x命名的文件成为while read
循环的标准输入,而不是从您的bash脚本的标准输入读取。也就是说,该脚本的stdin与while循环的stdin不同。
只需省略重定向。