为多个 shell 函数重定向 stdin

为多个 shell 函数重定向 stdin

如何强制该脚本执行我想要的操作?

#!/bin/bash

function One()
{
  IFS='' read -r -n1 CHAR
  echo "One: '$CHAR'"
  Two
}

function Two()
{
  IFS='' read -r n1 CHAR
  echo "Two: '$CHAR'"
}

One < MyFile.txt

什么是应该发生的情况是从One()读取第一个字符MyFile.txt,然后Two()读取第二个字符。然而Two()总是读到一个空字符,我完全不知道为什么为什么... 有什么提示吗?

# bash -x Test.sh
+ One
+ IFS=
+ read -r -n1 CHAR
+ echo 'ONE: '\''S'\'''
One: 'S'
+ Two
+ IFS=
+ read -r n1 CHAR
Two: ''

答案1

嘎啊!我刚刚想通了...它好像当您调用另一个函数时,重定向会重置。但事实并非如此。这真实的问题更愚蠢:

IFS='' read -r n1 CHAR

少了一个破折号!

IFS='' read -r -n1 CHAR

[捂脸]

相关内容