bash 需要停止 for 循环添加新行

bash 需要停止 for 循环添加新行

我这两天一直在研究这个问题,需要一些意见。我正在创建一个通用脚本来检查我拥有的任何设备上的任何驱动器。唯一让我无法解决的问题是在 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

相关内容