0

我有一个文件,内容如下:

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

我无法弄清楚如何做到这一点。谢谢。

4

4 回答 4

2

与其进行分配然后将数据附加到变量,不如在进行初始分配时执行您想要的操作:

var=$( cat file.txt; echo ggg hhh; echo iii jjj; )

或者

var=$( cat file.txt - << EOF
ggg hhh
iii jjj
EOF
)
于 2013-11-04T14:39:48.387 回答
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扩展。

  1. $(< file.txt)是标准的更有效实施$(cat file.txt)
  2. $'...'不支持dash,但嵌入的换行符仍然可以工作:

    var2="$string1
    $string2"
    
  3. printf "%s\n" "$string1" "$string2"应该可以正常工作dash
于 2013-11-04T14:36:51.240 回答
1
$ var="$var
> xxx yyy
> zzz ggg"

$ echo $var
aaa bbb
ccc ddd
eee fff
xxx yyy
zzz ggg
于 2013-11-04T14:40:22.970 回答
-1

您只需在附加模式下回显它

echo "$var" >> newfile.txt

>> 表示它不会以纯写模式打开文件。它在 O_RDRW | 中打开 O_APPEND

于 2013-11-04T14:37:16.777 回答