Linux Bash编程中标准输入的读取

Linux Bash编程中标准输入的读取,linux,bash,input,stdin,Linux,Bash,Input,Stdin,我一直在为Uni做一个bash编程任务,一切都正常,除了Automark软件(blackbox)给了我0/5分。。我联系了我的大学讲师,他回答说: “从标准输入读取”的含义似乎有些混淆。这意味着您从终端的键盘而不是从命令行读取…此错误在histo(以前的程序)中。它似乎也在histoplot中。(我在这里谈论的程序) 现在我不知道这意味着什么。我浏览了整个互联网,我认为我的代码是从标准输入读取的 “边读边写”不是这样吗?我的程序获取数据并将其转换为如下所示的历史图: 1 1 2 3 3 2

我一直在为Uni做一个bash编程任务,一切都正常,除了Automark软件(blackbox)给了我0/5分。。我联系了我的大学讲师,他回答说:

“从标准输入读取”的含义似乎有些混淆。这意味着您从终端的键盘而不是从命令行读取…此错误在histo(以前的程序)中。它似乎也在histoplot中。(我在这里谈论的程序)

现在我不知道这意味着什么。我浏览了整个互联网,我认为我的代码是从标准输入读取的

“边读边写”不是这样吗?我的程序获取数据并将其转换为如下所示的历史图:

 1 1
 2 3
 3 2
 4 1
并将其转化为:

 1 #
 2 ###
 3 ##
 4 #
这是我的代码(抱歉有这么多):

#/bin/bash
addWordcount=0
customHash=0
customHashchoice=“#”
比例=0
因为我在$*
做
如果[[$i=“-c”]]
然后
addWordcount=1
elif[[$i=“-p”]]
然后
customHash=1
elif[[$i=“-s”]]
然后
比例=1
fi
完成
对于x英寸$*
做
如果[-f$x];然后
读行时
做
lineAmnt=${line%*}
hashNo=${line##*}

为了((i=0;i
while read line
确实从stdin读取,但您使用了重定向。通过在read line;do…done
时写入
,您将使$x中命名的文件成为
while read
循环的stdin,而不是从bash脚本的stdin读取。也就是说,该脚本的stdin与stdin不同是while循环的一部分


省略重定向。

而read line
确实从stdin读取。stdin并不总是(甚至通常是)一个键盘,但许多人将两者混为一谈。不要让自己陷入认为stdin是一个键盘的陷阱。感谢您的输入!什么是“省略重定向”?删除“<$x”第三行到最后一行?@BarneyChambers:是。
<$x
是重定向的一个实例,这要感谢
outfile
是输出重定向的一个实例)。
 #!/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