在外壳中逐行读取变量(包括破折号)

时间:2019-03-24 02:07:30

标签: shell sh

我有一个带有已存储日志的变量。我想要的是读取包含日志的变量的每一行,并保留该行或删除某些过滤内容。

问题是我的代码在bash上有效,但在破折号上无效。

这是我的代码:

filtered_logs=""
while IFS= read -r line
do
 ...(store line to $filterered_logs if it comes throught filter )
done <<< "$logs"
logs="$filtered_logs"

此代码在bash中有效。但是' done <<<“ $ logs” '不能在破折号中工作(因为在ubuntu中默认为sh)。这是一项家庭作业,我需要,它可以在每种外壳上都能使用。

我尝试过的是:

filtered_logs=""
echo "$logs" |
while IFS= read -r line
do
 ...(store line to $filterered_logs if it comes throught filter )
done
logs="$filtered_logs"

但是,如果我从while周期到$ filtered_logs中存储一些内容,它将无法正常工作。而且我也无法在使用调试器循环时访问此文件。 (我认为整个while周期是全新的过程,因为我使用|。

我的问题是如何使它工作。谢谢

1 个答案:

答案 0 :(得分:0)

在您的情况下,很容易使用干净的posix api:

logs=$(
   printf "%s" "$logs" |
   while IFS= read -r line
   do
      echo "store this to logs"
   done
)