我有一个这样的文本文件:
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
打印只有最后一行,但不保留从文件中读取的其他行。
答案 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