我有一个包含以下内容的文件:
aaa bbb
ccc ddd
eee fff
如果我将文件捕获到变量中:
var=`cat file.txt`
我可以回复这样的内容:
echo $var
aaa bbb ccc ddd eee fff
或者像这样,保留换行符:
echo "$var"
aaa bbb
ccc ddd
eee fff
我想在变量$ var中添加新的文本行,这样当我将$ var写回文件时:
echo "$var" > newfile.txt
newfile.txt的内容最后会有我的新行:
var2=`cat newfile.txt`
echo "$var2"
aaa bbb
ccc ddd
eee fff
ggg hhh
iii jjj
我无法弄清楚如何做到这一点。 感谢。
答案 0 :(得分:2)
不是进行赋值然后将数据附加到变量,而是在进行初始赋值时执行所需的操作:
var=$( cat file.txt; echo ggg hhh; echo iii jjj; )
或
var=$( cat file.txt - << EOF
ggg hhh
iii jjj
EOF
)
答案 1 :(得分:1)
$ var2=$(< file.txt)
$ var2+=$'ggg hhh\niii jjj\n'
$ echo "$var2" > newfile.txt
$ cat new file.txt
aaa bbb
ccc ddd
eee fff
ggg hhh
iii jjj
+=
运算符可用于将值附加到现有参数的末尾。您也可以放弃修改var2
的值,只需编写如下附加数据:
$ var2=$(< file.txt)
$ { echo "$var2"
> printf "%s\n" "ggg hhh" "iii jjj"
> } > newfile.txt
一些更新可避免bash
次扩展。
$(< file.txt)
是标准$(cat file.txt)
。$'...'
不支持 dash
,但嵌入式换行仍应有效:
var2="$string1
$string2"
printf "%s\n" "$string1" "$string2"
应该可以在dash
中正常使用。答案 2 :(得分:1)
$ var="$var
> xxx yyy
> zzz ggg"
$ echo $var
aaa bbb
ccc ddd
eee fff
xxx yyy
zzz ggg
答案 3 :(得分:-1)
你只需在附加模式中回显它
echo "$var" >> newfile.txt
&gt;&gt;意味着它不会以普通写入模式打开文件。它在O_RDRW中打开O_APPEND