Denny Asked: 2018-04-22 09:15:43 +0800 CST2018-04-22 09:15:43 +0800 CST 2018-04-22 09:15:43 +0800 CST 序列命令和测试题 772 这是我遇到的一个测试问题: 以下命令序列将产生哪个输出? echo '1 2 3 4 5 6' | while read a b c; do echo result: $c $b $a; done 而正确的答案是:3 4 5 6 2 1 我不知道为什么。有人可以向我解释一下吗? (起初我以为答案是3 2 1。) shell command 1 个回答 Voted Best Answer jesse_b 2018-04-22T09:21:50+08:002018-04-22T09:21:50+08:00 从阅读手册页: 从标准输入读取单行,如果提供了 -u 选项,则从文件描述符 FD 读取。与分词一样,该行被分成多个字段,第一个单词分配给第一个 NAME,第二个单词分配给第二个 NAME,依此类推,任何剩余的单词都分配给最后一个 NAME。只有 $IFS 中的字符被识别为单词分隔符。 出于这个原因,我通常使用“垃圾”变量来收集任何可能剩余的东西: echo '1 2 3 4 5 6' | while read a b c TRASH; do echo "result is: $c $b $a" echo "trash is: $TRASH" done 正在使用: $ echo '1 2 3 4 5 6' | while read a b c TRASH; do > echo "result is: $c $b $a" > echo "trash is: $TRASH" > done result is: 3 2 1 trash is: 4 5 6
从阅读手册页:
出于这个原因,我通常使用“垃圾”变量来收集任何可能剩余的东西:
正在使用: