从变量中逐行读取文件

时间:2016-03-24 12:48:53

标签: bash shell sh

我正在编写一个脚本,并且不清楚read -r line如何知道从哪个变量获取数据..我想从FILE变量逐行读取。

以下是我正在处理的脚本:

#!/bin/bash
cd "/"
FILE="$(< /home/FileSystemCorruptionTest/*.chk)" 

while read -r line
do
    echo "$line" > /home/FileSystemCorruptionTest/`date +%Y_%m_%d_%H_%M_%S`_1.log
done

echo "" > /home/FileSystemCorruptionTest/Done

2 个答案:

答案 0 :(得分:2)

由于您希望合并多个文件,我想我认为这是cat的合法用法:

cat /home/FileSystemCorruptionTest/*.chk | while read -r line
do
    echo "$line"
done > /home/FileSystemCorruptionTest/`date +%Y_%m_%d_%H_%M_%S`_1.log

请注意,我将重定向移出循环,以防止每行覆盖一次文件。

另请注意,您的示例可以轻松地写为:

cat /home/FileSystemCorruptionTest/*.chk > /home/FileSystemCorruptionTest/`date +%Y_%m_%d_%H_%M_%S`_1.log

如果您实际只有一个文件(并希望将其存储在变量中),那么您可以在循环后使用<<<

while read -r line
do
    echo "$line"
done <<<"$FILE" > /home/FileSystemCorruptionTest/`date +%Y_%m_%d_%H_%M_%S`_1.log

<<< "$FILE"与在循环之前使用echo "$FILE" |具有相同的效果,但它不会创建任何子shell。

答案 1 :(得分:1)

您的要求:

echo "${FILE}" | while read -r line …

但我认为汤姆的解决方案更好。