- 情景
- 解决方案
- 方案1 while read的应用
- 方案2 设置分割符
- 解释
我们经常会使用 cat 命令读取文件,但当行内有空白符(空格、tab、换行)时就不会按行输出了
文件内容
a b 1 2 3 4
脚本内容
for i in `cat file` do echo $i done
结果内容
a b 1 2 3 4解决方案 方案1 while read的应用
格式1
while read line do echo $line done < file
格式2
cat file | while read line do echo $line done
方案2 设置分割符read通过输入重定向,把file的第一行所有的内容赋值给变量line,循环体内的命令一般包含对变量line的处理
IFS=$'n' # 定义分割符 # for i in $(cat file) # better # for i in $( 解释IFS="n"
# 将字符n作为IFS的换行符。
IFS=$"n"# 这里n确实通过$转化为了换行符,但仅当被解释时(或被执行时)才被转化为换行符;第一个和第二个是等价的IFS=$'n' # 这才是真正的换行符。
Shell 脚本中有个变量叫IFS(Internal Field Seprator) ,内部域分隔符。
Shell 的环境变量分为set, env两种,其中 set 变量可以通过 export 工具导入到 env 变量中。
其中,set 是显示设置shell变量,仅在本 shell 中有效;env 是显示设置用户环境变量 ,仅在当前会话中有效。IFS 是一种 set 变量,当 shell 处理"命令替换"和"参数替换"时,shell 根据 IFS 的值,默认是 space, tab, newline来拆解读入的变量,然后对特殊字符进行处理,最后重新组合赋值给该变量.
IFS 详细内容可参考:https://www.cnblogs.com/weq0805/p/15027357.html



