redir2a.sh

来自「BASH Shell 编程 经典教程 《高级SHELL脚本编程》中文版」· Shell 代码 · 共 46 行

SH
46
字号
#!/bin/bash# 这是上个脚本的另一个版本. #  Heiner Steven建议, #+ 为了避免重定向循环运行在子shell中(老版本的shell会这么做), 最好让重定向循环运行在当前工作区内, #+ 这样的话, 需要提前进行文件描述符重定向, #+ 因为变量如果在(子shell上运行的)循环中被修改的话, 循环结束后并不会保存修改后的值. if [ -z "$1" ]then  Filename=names.data     # 如果没有指定文件名则使用默认值. else  Filename=$1fi  exec 3<&0                 # 将stdin保存到文件描述符3. exec 0<"$Filename"        # 重定向标准输入. count=0echowhile [ "$name" != Smith ]do  read name               # 从stdin(现在已经是$Filename了)中读取.   echo $name  let "count += 1"done                      #  从文件$Filename中循环读取                          #+ 因为文件(译者注:指默认文件, 在本节最后)有20行. #  这个脚本原先在"while"循环的结尾还有一句: #+      done <"$Filename" #  练习:#  为什么不需要这句了? exec 0<&3                 # 恢复保存的stdin. exec 3<&-                 # 关闭临时文件描述符3. echo; echo "$count names read"; echoexit 0

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?