用于读取文本的Shell脚本逐行读取文件并附加到中间带有单词的变量

时间:2017-09-27 19:09:28

标签: shell

我有一个这样的文本文件:

abc:value
test:value

我希望逐行阅读这些内容并附加到我的shell脚本中的变量,并添加自定义字符串。 所以我想要一个变量:“ Hello abc:value Hello test:value

我用过:

for line in $(cat $hdr_file)
do
    HDRS="-H $line"
    echo $HDRS  
    hdrtxt=$HDRS            
done
echo $hdrtxt

但是$hdrtxt打印只有最后一行,但不保留从文件中读取的其他行。

2 个答案:

答案 0 :(得分:1)

首先,不要在shell / bash中读取带有for循环的文件行(默认情况下它会在任何空格(空格,制表符,换行符)上拆分)。
在您的简单情况下,使用printf + sed

即可
hdrtxt=$(printf "%s " $(sed 's/^/Hello /' "$hdr_file"))
echo "$hdrtxt" 
Hello abc:value Hello test:value

答案 1 :(得分:0)

每次循环运行都会覆盖变量$hdrtext。要附加到shell变量,请在每个赋值中包含变量本身:

unset hdrtxt
while read line
do
     HDRS="-H $line"
     echo $HDRS
     hdrtxt="$hdrtxt$HDRS"
done < $hdr_file
echo $hdrtxt

输出:

-H abc:value
-H test:value
-H test:value-H abc:value

注意:$HDRS变量不是必需的,并且循环echo似乎只是诊断,因此代码可以简化:

unset hdrtxt
while read line
do
     hdrtxt="${hdrtxt}-H $line"
done < $hdr_file
echo $hdrtxt