Hvorfor gir echo -e “ \ n ” meg to blanke linjer i stedet for en?
On februar 1, 2021 by admin La oss si det «sa linje» aaaa «i file.txt, og jeg vil legge til KUN EN tom linje etter den, og deretter legge til en tekstlinje etter den tomme linjen.
Det gjorde jeg:
ekko -e «\ n» >> file.txt
echo «bbbb» >> file.txt
Og så så jeg to blanke linjer mellom aaaa og bbbb
Når jeg bare bruker ekko «bbbb» >> file.txt så er det ingen tom linje mellom de to tekstlinjene.
Hvorfor skjer dette, og hvordan blir jeg kvitt det ?
Kommentarer
- OK, la meg oppsummere det riktige svaret: \ n betyr å flytte markøren til neste linje og betyr ikke ' t betyr en tom linje.
Svar
echo
sender ut strengen du bruker som argument, og legger deretter til et nytt linjetegn på slutten av den utgående strengen for å avslutte linjen.
Med
echo "string"
får du string
, og en ny linje på slutten.
Derfor, med
echo -e "\n"
får du din nye linje, og en ny linje på slutten (dvs. to tomme linjer).
Hvis du ikke vil ha den ekstra nye linjen (dvs. å sende ut en uavbrutt linje), bruk echo
med -n
alternativet, eller i dette tilfellet hvor du bare vil sette inn en tom linje, bruk bare echo ""
eller echo
uten argument i det hele tatt.
Fra help echo
i bash
:
Options: -n do not append a newline -e enable interpretation of the following backslash escapes
Hvis du vil ha noe som er bærbart til andre skjell i tillegg til bash
, bruk printf
i stedet:
printf "\n" >>file.txt printf "bbbb\n" >>file.txt
Eller en annen måte å gjøre de to uttalelsene på med en enkelt omdirigering:
{ printf "\n" printf "bbbb\n" } >>file.txt
Eller bare
printf "\nbbbb\n" >>file.txt
Relatert:
Kommentarer
- Hvis det ' virkelig er newline automatisk lagt til første linje når jeg brukte ekko, hvorfor fikk jeg ingen tom linje mellom teksten i mitt andre forsøk (beskrevet under spørsmålet mitt)?
- @OhLook I ditt første forsøk legger du til to nye linjer (en er din
\n
, den andre kommer fra den nye linjen somecho
alltid legger til). I ditt andre forsøk legger du bare til strengenbbbb
med en ny linje på slutten. Jeg ser ikke ' hvor forvirringen din kommer fra. - @OhLook Hvorfor skulle det være en tom linje? Filen din ville inneholde
aaaa\nbbbb\n
deraaaa\n
var der fra starten ogbbbb\n
var lagt til avecho 'bbbb'
. Å gjøreecho -e '\n'
vil legge til\n\n
til det eksisterende innholdet i filen. Hvis den allerede inneholderaaaa\n
, får du 'aaaa\n\n\n
. - @OhLook
\n
er et nylinjetegn . Den beveger markøren til starten av neste linje. Hadde det ikke vært noen ny linje på slutten avaaaa
fra starten, vil du fåaaaabbbb
på en enkelt linje når du legger tilbbbb
. - @OhLook
echo -e '\n'
legger til to nye linjer. Se forrige kommentar. Du vil kjøre tre nye linjetegn i filen. Det betyr den nye linjen som er slutten avaaaa
-linjen (som var der fra starten), og deretter to lagt til avecho -e '\n'
. Dette gir to tomme linjer.
Legg igjen en kommentar