Открытие файла в режиме записи

#bash #file #shell

#bash #файл #оболочка

Вопрос:

У меня есть файл под названием a.txt . со значениями типа

 1
2
3
...
  

Я хочу перезаписать этот файл, но

 echo "$var" >> a.txt
echo "$var1" >> a.txt
echo "$var2" >> a.txt
...
  

просто добавляется. Использование > также бесполезно. Как я могу перезаписать с помощью >> operator в сценарии оболочки?

Комментарии:

1. Можете ли вы более конкретно объяснить, почему «использование> бесполезно»? Разве он не перезаписывается точно так, как вы запрашиваете?

2. эхо «$var» > a.txt echo «$var1» > a.txt echo «$var2» > a.txt когда я использую это, в файле содержится только $ var.

3. эхо «$var» > a.txt должен выполнить задание, попробуйте это

4. итак, возможно, вы хотите echo "$var" > a.txt echo "$var1" >> a.txt echo "$var2" >> a.txt (то есть, стереть файл только в первый раз, затем добавить остальные)

Ответ №1:

Возможно, вы захотите использовать > для первого перенаправления и >> для последующих перенаправлений:

 echo "$var" > a.txt
echo "$var1" >> a.txt
echo "$var2" >> a.txt
  

Ответ №2:

> усекает файл, если он существует, и выполняет то, что вы изначально просили.

>> добавляется к файлу, если он существует.

Если вы хотите перезаписать содержимое файла (не усекать его), используйте 1<>

например:

 [23:58:27 0 ~/tmp] $ echo foobar >a
[23:58:28 0 ~/tmp] $ cat a
foobar
[23:58:50 0 ~/tmp] $ echo -n bar 1<>a
[23:58:53 0 ~/tmp] $ cat a
barbar
  

Ответ №3:

Каким образом использование > бесполезно? Это явно делает то, что вы хотите, перезаписывая файл, поэтому используйте > для первого, а затем >> для добавления будущих значений.

Ответ №4:

 echo "$var
$var1
$var2" > a.txt
  

или

 echo -e "$varn$var1n$var2" > a.txt