如何在C shell中逐行解析stdout标准输出内容?
解决C Shell逐行读取命令输出的方案
问题原因
C Shell默认的内部字段分隔符(IFS)同时包含空格、制表符、换行符三类字符,使用反引号获取命令输出时,会自动按所有IFS字符拆分结果,因此带空格的行也会被拆分为多个独立项,就是你遇到的按空格分割输出的问题。
解决方案
方案1:临时修改IFS仅保留换行符
在执行foreach前临时修改IFS配置,读取完成后恢复原有配置避免影响后续逻辑,代码示例如下:
# 备份原有IFS配置 set old_ifs = "$IFS" # 设置IFS仅为换行符 set IFS = "\n" foreach line (`./script.csh`) echo $line end # 恢复原有IFS配置 set IFS = "$old_ifs"
方案2:管道搭配while逐行读取(兼容性更好)
如果修改IFS容易干扰其他逻辑,可以用管道配合while结构逐行读取:
./script.csh | while read line echo "$line" end
注意:该写法的while循环运行在子shell中,循环内部定义的变量在循环结束后无法被外层脚本访问,有跨循环保留变量需求请优先使用方案1。
两种方案运行后都能得到预期的按行输出结果:
First line Second line Third line
内容的提问来源于stack exchange,提问作者Ghengis Sean
相关产品推荐
相关产品推荐

