![bash 需要停止 for 循环添加新行](https://linux22.com/image/198659/bash%20%E9%9C%80%E8%A6%81%E5%81%9C%E6%AD%A2%20for%20%E5%BE%AA%E7%8E%AF%E6%B7%BB%E5%8A%A0%E6%96%B0%E8%A1%8C.png)
我这两天一直在研究这个问题,需要一些意见。我正在创建一个通用脚本来检查我拥有的任何设备上的任何驱动器。唯一让我无法解决的问题是在 for 循环中运行时文本文件中的 megaraid 行被更改从一行到 3x 行(下面的示例)我已经花了很多时间了,现在任何关于如何防止它拆分“bus -d disk”格式并将其保留在一行上的建议都会很棒。
(创建时的单行以及在普通猫中运行标准输出时的单行)
$ sudo smartctl --scan |grep megaraid |awk '{print $1,$2,$3}' > megadrives; cat megadrives
/dev/bus/0 -d megaraid,0
/dev/bus/0 -d megaraid,1
/dev/bus/0 -d megaraid,2
/dev/bus/0 -d megaraid,3
(当在 for 循环中运行时,将每行拆分为 3x 新行)
$ for i in $(cat megadrives); do echo $i; done
/dev/bus/0
-d
megaraid,0
/dev/bus/0
-d
megaraid,1
/dev/bus/0
-d
megaraid,2
/dev/bus/0
-d
答案1
读取行通常是用
while IFS= read -r line; do
echo "$line"
done <inputfile
顺便提一句
您可以更换
: > megadrives; cat megadrives
和
: | tee megadrives
答案2
其实我一直在寻找错误的答案,我找到了。任何空格都会导致换行。
IFS=$'\n' # 使换行符成为 $(cat ./file_wget_med) 中 j 的唯一分隔符 do echo "$j" done解决问题来自: https://askubuntu.com/questions/344407/how-to-read-complete-line-in-for-loop-with-spaces