Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash while循环中的I/O重定向_Bash_Loops_Sh_Io Redirection - Fatal编程技术网

Bash while循环中的I/O重定向

Bash while循环中的I/O重定向,bash,loops,sh,io-redirection,Bash,Loops,Sh,Io Redirection,打印文件行的代码可能如下所示 while read i; do echo $i done < ${filename} 阅读时;做 回声$i 完成

打印文件行的代码可能如下所示

while read i; do 
    echo $i
done < ${filename}
阅读时
;做
回声$i
完成<${filename}
但是为什么我们不能这样写呢?解释一下

while read i < ${filename}; do 
    echo $i
done 
读取时i<${filename};做
回声$i
完成
您可以这样写,但它总是读取第一行

将while循环想象成这样:

  • 在第一种情况下:
  • 将文件连接到stdin
  • 读到换行
  • 循环(阅读下一行)
  • 断开文件连接
  • 在第二种情况下:
  • 将文件连接到stdin
  • 读到换行
  • 断开文件连接
  • 循环(重新连接文件、读取行、断开文件连接)

  • 命令
    <${filename}
    在这两个示例中都是重定向,而不是主题/标题所暗示的过程替换。但我无法回答您的问题,这似乎是可能的,但可能与启动以处理
    while
    循环的子流程有关。祝你好运。当你尝试时会发生什么?@larsks还没有尝试过。但是答案已经解释了一切。@Sheller:)很抱歉输入错误。