如何在 bash 中将文本写入文件同时保留其先前的内容?

如何在 bash 中将文本写入文件同时保留其先前的内容?

我一直在尝试创建一个 Bash shell 脚本,用于创建和更改名为 的文件list。实际上,我使用该程序的目的是将名称附加到列表中,并创建带有标题的文件(如果需要)。

但是,脚本目前在某一点失败:每当我再次运行脚本时,旧名称就会消失,并被刚刚输入的名称替换。我该如何解决这个问题?

我的脚本:

#!/bin/bash
#Please sign your name here.

echo "Hi, what's your name?"
read name
echo "Hi $name, welcome to the Linux course!"

echo Course Attendees > list
echo $name >> list

问题示例:

$ bash list.sh
Hi, what's your name?
Test
Hi Test, welcome to the Linux course!

$ cat list
Course Attendees
Test

$ bash list.sh
Hi, what's your name?
Test2
Hi Test, welcome to the Linux course!

$ cat list
Course Attendees
Test2

答案1

在 Bash 中,有两种写入文件的方法(从技术上讲,还有很多方法,但就这个答案的所有意图和目的而言,只有两种):

首先是运算符>,正如您在这一行中使用的:

echo Course Attendees > list

运营>商将覆写将文件中现有的任何内容替换为文件的新内容。实际上,它会删除该文件,并创建一个同名的新文件。

其次是>>运算符,正如这里所用的:

echo $name >> list

这会附加行添加到现有文件,如果不存在则创建一个新文件。

运行脚本时,您总是用“课程参加者”标题覆盖课程列表,从而导致此错误。修改程序,仅在存在“课程参加者”标题时才附加行。我个人的建议是检查文件是否存在。如果存在,则仅使用附加操作。否则,给它标题并创建它。

echo Course Attendees > list或者,更优雅地,只有当文件不存在时才运行。参见这个答案了解更多信息如何进行这样的检查。

相关内容