Linux shell перенос строки

Echo newline in Bash prints literal \n

For those saying «it works for me», the behavior of echo varies quite a bit between versions. Some will even print the «-e» as part of their output. If you want predictable behavior for anything nontrivial, use printf instead (as in @sth’s answer).

I could not get any of the suggestions in this answer working, because, as it turns out, I was attempting to use it in a function that returns a value, and all the echo (and printf) messages in the function were being appended to the return value after being individually stripped of newlines. Here is a question regarding this, with an extremely thorough answer: stackoverflow.com/questions/27872069/… This was like a three hour mystery tour.

Also notable: in Unix & Linux Stack Exchange, the accepted answer to How to add new lines when using echo

echo -ne «hello\nworld» (you needed the n flag to interpret escapes) — but as others say, different echo commands may have different results!

@Konchog echo -n man page entry on archlinux ` -n do not output the trailing newline` It has nothing to do with interpreting escapes

22 Answers 22

printf behaves more consistently across different environments than echo .

The OP asked about echo, not printf; and @choroba’s answer below, which uses the -e option, fills the bill perfectly.

With some versions of echo , -e is just printed in the output itself so I think this answer is perfectly valid since echo isn’t consistent here (unless we’re talking about a specific version).

Make sure you are in Bash.

All these four ways work for me:

echo -e "Hello\nworld" echo -e 'Hello\nworld' echo Hello$'\n'world echo Hello ; echo world 

As mentioned by various other -e does NOT work for all distributions and versions. In some cases it is ignored and in others it will actually be printed out. I don’t believe this fixed it for the OP so should not be accepted answer

Words of the form $’string‘ are treated specially. The word expands to string, with backslash-escaped characters replaced as specified by the ANSI C standard.

@EvgeniSergeev Not sure what you mean, but it didn’t work for me either first. And that’s because I was using double quotes and turns out this works only with single quotes! Tried in Terminal on Mac.

For me this is the only right answer to the asked question. It does not use another command and relies on bash. An extra echo does the wrong job here. One point I want to add: It seems to only work on bourne-like shells, which is basically every shell used out there. (see here)

echo "Hello," echo "" echo "World!" 

echo «» works for me and I think it’s the simplest form to print a new line, even if this doesn’t directly answer the question. Cheers.

Читайте также:  Ping linux запретить фрагментацию

i had trouble getting the other answers to work on Mac. i ended up going with this incredibly obvious solution. 🙂

On the off chance that someone finds themselves beating their head against the wall trying to figure out why a coworker’s script won’t print newlines, look out for this:

#!/bin/bash function GET_RECORDS() < echo -e "starting\n the process"; >echo $(GET_RECORDS); 

As in the above, the actual running of the method may itself be wrapped in an echo which supersedes any echos that may be in the method itself. Obviously, I watered this down for brevity. It was not so easy to spot!

You can then inform your comrades that a better way to execute functions would be like so:

#!/bin/bash function GET_RECORDS() < echo -e "starting\n the process"; >GET_RECORDS; 

Источник

How to Echo Newline in Bash

In Bash, there are multiple ways we can display a text in the console or terminal. We can use either the echo or printf command to print a text. Each of these commands has their unique behaviors.

In this guide, we’ll learn how to print a newline in Bash.

Newline in Bash

Before going further, here’s a quick refresh on what a newline is. It’s usually used to specify the end of a line and to jump to the next line. It’s expressed with the character “\n” in UNIX/Linux systems. Most text editors will not show it by default.

Printing Newline in Bash

There are a couple of different ways we can print a newline character. The most common way is to use the echo command. However, the printf command also works fine.

Using the backslash character for newline “\n” is the conventional way. However, it’s also possible to denote newlines using the “$” sign.

Printing Newline Using Echo

The echo command takes a string as input and prints it out on the console screen. To print any text, we use the echo command in the following manner:

As mentioned earlier, the newline character is “\n”, right? How about we try to include it directly with echo?

Well, that didn’t go as expected. What happened?

By default, the echo command will print the string provided, character by character. It doesn’t interpret backslash characters. However, we can fix this by adding the flag “-e”. It enables backslash character interpretation. Let’s fix the command and run it again:

Voila! Now it’s working as expected!

This technique also works when using Bash variables. Take a look at the following example:

$ sentence = «The \n Quick \n Brown \n Fox»

Printing Newline Using $

We can also use the “$” sign with the echo command to specify the newline character. This method is a bit more complex than the previous one. The explanation is best done with an example.

Run the following command:

  • The given string isn’t inside double quotations.
  • Before each newline character “\n”, we’re using the “$” sign.
  • Each newline character “\n” is provided inside single quote.

Printing Newlines with Multiple Echo Statements

In this approach, we’re basically going to run multiple echo commands instead of one. By default, echo prints the given string and adds a newline character at the end. By running multiple echo statements at once, we’re taking advantage of that.

Читайте также:  Установка router scan kali linux

Let’s have a look at the following example.

  • We’re running 4 echo commands.
  • Each command is separated by a semicolon (;). It’s the default delimiter in Bash.

Printing Newline with Printf

Similar to echo, the printf command also takes a string and prints it on the console screen. It can be used as an alternative to the echo command.

Have a look at the following example.

As you can see, printf processes backslash characters by default, no need to add any additional flags. However, it doesn’t add an additional newline character at the end of the output, so we have to manually add one.

Final Thoughts

In this guide, we’ve successfully demonstrated how to print newlines in Bash. The newline character is denoted as “\n”. Using both the echo and printf commands, we can print strings with new lines in them. We can also cheat (well, technically) by running the same tool multiple times to get the desired result.

For more in-depth info about echo and printf, refer to their respective man pages.

Interested in Bash programming? Bash is a powerful scripting language that can perform wonders. Check out our Bash programming section. New to Bash programming? Get started with this simple and comprehensive guide on Bash scripting tutorials for beginners.

About the author

Sidratul Muntaha

Student of CSE. I love Linux and playing with tech and gadgets. I use both Ubuntu and Linux Mint.

Источник

How to echo a New Line in Bash Shell Scripts

Learn various ways of displaying a new line in the output of echo command in Linux.

The echo command automatically adds a new line at the end. That’s cool.

But what if you want to display just an empty new line? Or if you want to output something that contains a new line?

The good news is that, echo lets you use the newline character \n to print a new line within the same output line if you use the -e option:

echo -e "Name\nAddress\nPhone Number"

If you run the above command, you’ll get this output:

Name Address Phone Number

That’s nice, right? Let’s have a more detailed look into it.

Display new line with -e flag of echo command (recommended)

A newline is a term we use to specify that the current line has ended and the text will continue from the line below the current one. In most UNIX-like systems, \n is used to specify a newline. It is referred to as newline character.

The echo command, by default, disables the interpretation of backslash escapes. So if you try to display a newline using the ‘\n’ escape sequence, you will notice a problem.

$ echo Hello\nworld Hellonworld $ echo 'Hello\nworld' Hello\nworld

Enclosing text in single quotes as a string literal does not work either.

That was not an expected output. To actually print a new-line, you can use the ‘-e’ flag to tell the echo command that you want to enable the interpretation of backslash escapes.

$ echo -e 'Hello\nworld' Hello world

Nice, that’s what you are looking for.

Let me some other ways to display the newline character.

echo a variable containing new line

You can store a string in a bash variable and then echo it using the ‘-e’ flag.

$ str="Hello\nworld" $ echo -e $str Hello world

Use the ‘$’ character instead of -e flag

The dollar symbol, ‘$’ is called the «expansion» character in bash. This is the character that I used in the earlier example to refer to a variable’s value in shell.

Читайте также:  Canon lbp 1120 драйвер astra linux

If you look closely at the snippet below, you will realize that the expansion character, in this case, acts to hold a temporary value.

$ echo Hello$'\n'world Hello world

Or, you can use the whole string as a ‘temporary variable’:

$ echo $'Hello\nworld' Hello world

I would prefer to use the -e flag, though.

echo your echo to print something with new line

When you echo a piece of text, the echo command will automatically add a newline (and here is how you can prevent it) to the end of your text.

This means that you can chain multiple echo commands together to cause a newline.

$ echo Hello; echo world Hello world

Use printf to print newline in Bash shell

printf is another command line tool that essentially prints text to the terminal, but it also allows you to format your text.

The usage is very simple and similar to echo but a bit more reliable and consistent.

$ printf 'Hello\nworld\n' Hello world

As expected, you have a newline without using any flags.

Conclusion

Personally, I would prefer sticking with the -e flag or go for the printf command for displaying the new lines in output. I recommend you to do the same but feel free to experiment.

Источник

How can I have a newline in a string in sh?

What should I do to have a newline in a string? Note: This question is not about echo. I’m aware of echo -e , but I’m looking for a solution that allows passing a string (which includes a newline) as an argument to other commands that do not have a similar option to interpret \n ‘s as newlines.

13 Answers 13

If you’re using Bash, you can use backslash-escapes inside of a specially-quoted $’string’ . For example, adding \n :

STR=$'Hello\nWorld' echo "$STR" # quotes are required here! 

If you’re using pretty much any other shell, just insert the newline as-is in the string:

Bash recognizes a number of other backslash escape sequences in the $» string. Here is an excerpt from the Bash manual page:

Words of the form $'string' are treated specially. The word expands to string, with backslash-escaped characters replaced as specified by the ANSI C standard. Backslash escape sequences, if present, are decoded as follows: \a alert (bell) \b backspace \e \E an escape character \f form feed \n new line \r carriage return \t horizontal tab \v vertical tab \\ backslash \' single quote \" double quote \nnn the eight-bit character whose value is the octal value nnn (one to three digits) \xHH the eight-bit character whose value is the hexadecimal value HH (one or two hex digits) \cx a control-x character The expanded result is single-quoted, as if the dollar sign had not been present. A double-quoted string preceded by a dollar sign ($"string") will cause the string to be translated according to the current locale. If the current locale is C or POSIX, the dollar sign is ignored. If the string is translated and replaced, the replacement is double-quoted. 

Источник

Оцените статью
Adblock
detector