Why don't “echo -e” commands seem to produce the right output?How can I see a history of the terminal output, not just commands entered?Why do df and du show different output?Console doesn't show pretty UTF-8 characters in ShellWhy doesn't the `time` command work with any option?What do numbers between parentheses in bash man pages mean: bash(1), ssh_config(5), sshd(8),Troubles piping echo output to xargs script for mv commandCan sharing the output of these bash commands put you into a risk of being compromised?Direct output from a command to a file including the original command, AND print in terminalTurn off WSL Ubuntu echo when typing commands
Modeling an M1A2 Smoke Grenade Launcher
Sum and average calculator
How to investigate an unknown 1.5GB file named "sudo" in my Linux home directory?
Padding a column of lists
In Toy Story, are toys the only inanimate objects that become alive? And if so, why?
Can the inductive kick be discharged without a freewheeling diode, in this example?
Is it good practice to speed up and slow down where not written in a song?
Calculate Landau's function
Can a system of three stars exist?
Can two aircraft be allowed to stay on the same runway at the same time?
What is this "opened" cube called?
What's the origin of the concept of alternate dimensions/realities?
Can a pet cat attune to a magical item?
Why 50 Ω termination results in less noise than 1 MΩ termination on the scope reading?
How to number subfigures in Serbian Cyrillic?
Did NASA/JPL get "waning" and "waxing" backwards in this video?
Turn off Google Chrome's Notification for "Flash Player will no longer be supported after December 2020."
Confidence intervals for the mean of a sample of counts
Why do motor drives have multiple bus capacitors of small value capacitance instead of a single bus capacitor of large value?
A vector is defined to have a magnitude and *a* direction, but the zero vector has no *single* direction. So, how is the zero vector a vector?
Understanding data transmission rates over copper wire
Is Borg adaptation only temporary?
My colleague treats me like he's my boss, yet we're on the same level
Four day weekend?
Why don't “echo -e” commands seem to produce the right output?
How can I see a history of the terminal output, not just commands entered?Why do df and du show different output?Console doesn't show pretty UTF-8 characters in ShellWhy doesn't the `time` command work with any option?What do numbers between parentheses in bash man pages mean: bash(1), ssh_config(5), sshd(8),Troubles piping echo output to xargs script for mv commandCan sharing the output of these bash commands put you into a risk of being compromised?Direct output from a command to a file including the original command, AND print in terminalTurn off WSL Ubuntu echo when typing commands
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
In the terminal of Ubuntu 18.04 LTS, when I write this command:
echo -e "Hello\n"
Output:
Hellon
But it should print, as the man page says:
Hello
That is, first print Hello
, then , then a newline character. Where is the problem?
See these few echo -e
commands and their output:
man420@man420-X542UQ:~$ echo -e "HElloaaaaaa\n"
HEllon
man420@man420-X542UQ:~$ echo -e "HEllo\n"
HEllon
man420@man420-X542UQ:~$ echo -3 "HElloa\n"
HEllon
command-line echo
New contributor
add a comment |
In the terminal of Ubuntu 18.04 LTS, when I write this command:
echo -e "Hello\n"
Output:
Hellon
But it should print, as the man page says:
Hello
That is, first print Hello
, then , then a newline character. Where is the problem?
See these few echo -e
commands and their output:
man420@man420-X542UQ:~$ echo -e "HElloaaaaaa\n"
HEllon
man420@man420-X542UQ:~$ echo -e "HEllo\n"
HEllon
man420@man420-X542UQ:~$ echo -3 "HElloa\n"
HEllon
command-line echo
New contributor
yes.for first 2 it should output a .and last and n make a backslash escape n(new line).so why it should print Hello
– yolin00
8 hours ago
Try it without the quotes.
– ajgringo619
8 hours ago
add a comment |
In the terminal of Ubuntu 18.04 LTS, when I write this command:
echo -e "Hello\n"
Output:
Hellon
But it should print, as the man page says:
Hello
That is, first print Hello
, then , then a newline character. Where is the problem?
See these few echo -e
commands and their output:
man420@man420-X542UQ:~$ echo -e "HElloaaaaaa\n"
HEllon
man420@man420-X542UQ:~$ echo -e "HEllo\n"
HEllon
man420@man420-X542UQ:~$ echo -3 "HElloa\n"
HEllon
command-line echo
New contributor
In the terminal of Ubuntu 18.04 LTS, when I write this command:
echo -e "Hello\n"
Output:
Hellon
But it should print, as the man page says:
Hello
That is, first print Hello
, then , then a newline character. Where is the problem?
See these few echo -e
commands and their output:
man420@man420-X542UQ:~$ echo -e "HElloaaaaaa\n"
HEllon
man420@man420-X542UQ:~$ echo -e "HEllo\n"
HEllon
man420@man420-X542UQ:~$ echo -3 "HElloa\n"
HEllon
command-line echo
command-line echo
New contributor
New contributor
edited 8 hours ago
Eliah Kagan
89.4k23 gold badges249 silver badges391 bronze badges
89.4k23 gold badges249 silver badges391 bronze badges
New contributor
asked 9 hours ago
yolin00yolin00
262 bronze badges
262 bronze badges
New contributor
New contributor
yes.for first 2 it should output a .and last and n make a backslash escape n(new line).so why it should print Hello
– yolin00
8 hours ago
Try it without the quotes.
– ajgringo619
8 hours ago
add a comment |
yes.for first 2 it should output a .and last and n make a backslash escape n(new line).so why it should print Hello
– yolin00
8 hours ago
Try it without the quotes.
– ajgringo619
8 hours ago
yes.for first 2 it should output a .and last and n make a backslash escape n(new line).so why it should print Hello
– yolin00
8 hours ago
yes.for first 2 it should output a .and last and n make a backslash escape n(new line).so why it should print Hello
– yolin00
8 hours ago
Try it without the quotes.
– ajgringo619
8 hours ago
Try it without the quotes.
– ajgringo619
8 hours ago
add a comment |
1 Answer
1
active
oldest
votes
Backslashes are treated specially by echo -e
, but first they are sometimes treated specially by the shell (which in this case is bash
), according to the shell's quoting rules.
The argument echo
actually sees is Hello\n
. Because you have passed -e
to echo
, it treats backslash escapes specially, and \
is collapsed to a single . The final
n
is not escaped, so it appears literally.
The reason for this is that, prior to and separately from the operation of echo
itself, the shell treats specially in some contexts but not others. Unquoted
characters are always treated specially, single-quoted
are never treated specially, but the treatment of double-quoted
characters, as in the command you ran, is more subtle and complicated.
When the shell encounters double-quoted text in a command, as with "Hello\n"
, it treats as an escape character when it precedes a character that can itself have special meaning inside double quotes and not otherwise.
- Because
sometimes has a special meaning inside
""
, athat immediately precedes another
has the effect of quoting that second
. So inside double quotes, the first
\
are collapsed into.
- After those first two
characters, there is a third
character which is unaffected by those first two and which precedes an
n
. Butn
is not a character that is ever treated specially inside double quotes, so thebefore it is not treated specially in this situation. Thus
n
staysn
.
The effect is that, in double quotes, \n
is interpreted as \n
.
When echo -e
sees \n
, the first removes special meaning from the second, so
echo
prints n
literally for that text.
One solution is to remove a . Running
echo -e "Hello\n"
outputs Hello
with an extra newline at the end. A better solution is to use single quotes and write echo -e 'Hellon'
. Single quotes are the strongest form of quoting. An even better solution is usually to use printf
instead of echo
, which in this case would be printf 'Hellonn'
.
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "89"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
yolin00 is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1169851%2fwhy-dont-echo-e-commands-seem-to-produce-the-right-output%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Backslashes are treated specially by echo -e
, but first they are sometimes treated specially by the shell (which in this case is bash
), according to the shell's quoting rules.
The argument echo
actually sees is Hello\n
. Because you have passed -e
to echo
, it treats backslash escapes specially, and \
is collapsed to a single . The final
n
is not escaped, so it appears literally.
The reason for this is that, prior to and separately from the operation of echo
itself, the shell treats specially in some contexts but not others. Unquoted
characters are always treated specially, single-quoted
are never treated specially, but the treatment of double-quoted
characters, as in the command you ran, is more subtle and complicated.
When the shell encounters double-quoted text in a command, as with "Hello\n"
, it treats as an escape character when it precedes a character that can itself have special meaning inside double quotes and not otherwise.
- Because
sometimes has a special meaning inside
""
, athat immediately precedes another
has the effect of quoting that second
. So inside double quotes, the first
\
are collapsed into.
- After those first two
characters, there is a third
character which is unaffected by those first two and which precedes an
n
. Butn
is not a character that is ever treated specially inside double quotes, so thebefore it is not treated specially in this situation. Thus
n
staysn
.
The effect is that, in double quotes, \n
is interpreted as \n
.
When echo -e
sees \n
, the first removes special meaning from the second, so
echo
prints n
literally for that text.
One solution is to remove a . Running
echo -e "Hello\n"
outputs Hello
with an extra newline at the end. A better solution is to use single quotes and write echo -e 'Hellon'
. Single quotes are the strongest form of quoting. An even better solution is usually to use printf
instead of echo
, which in this case would be printf 'Hellonn'
.
add a comment |
Backslashes are treated specially by echo -e
, but first they are sometimes treated specially by the shell (which in this case is bash
), according to the shell's quoting rules.
The argument echo
actually sees is Hello\n
. Because you have passed -e
to echo
, it treats backslash escapes specially, and \
is collapsed to a single . The final
n
is not escaped, so it appears literally.
The reason for this is that, prior to and separately from the operation of echo
itself, the shell treats specially in some contexts but not others. Unquoted
characters are always treated specially, single-quoted
are never treated specially, but the treatment of double-quoted
characters, as in the command you ran, is more subtle and complicated.
When the shell encounters double-quoted text in a command, as with "Hello\n"
, it treats as an escape character when it precedes a character that can itself have special meaning inside double quotes and not otherwise.
- Because
sometimes has a special meaning inside
""
, athat immediately precedes another
has the effect of quoting that second
. So inside double quotes, the first
\
are collapsed into.
- After those first two
characters, there is a third
character which is unaffected by those first two and which precedes an
n
. Butn
is not a character that is ever treated specially inside double quotes, so thebefore it is not treated specially in this situation. Thus
n
staysn
.
The effect is that, in double quotes, \n
is interpreted as \n
.
When echo -e
sees \n
, the first removes special meaning from the second, so
echo
prints n
literally for that text.
One solution is to remove a . Running
echo -e "Hello\n"
outputs Hello
with an extra newline at the end. A better solution is to use single quotes and write echo -e 'Hellon'
. Single quotes are the strongest form of quoting. An even better solution is usually to use printf
instead of echo
, which in this case would be printf 'Hellonn'
.
add a comment |
Backslashes are treated specially by echo -e
, but first they are sometimes treated specially by the shell (which in this case is bash
), according to the shell's quoting rules.
The argument echo
actually sees is Hello\n
. Because you have passed -e
to echo
, it treats backslash escapes specially, and \
is collapsed to a single . The final
n
is not escaped, so it appears literally.
The reason for this is that, prior to and separately from the operation of echo
itself, the shell treats specially in some contexts but not others. Unquoted
characters are always treated specially, single-quoted
are never treated specially, but the treatment of double-quoted
characters, as in the command you ran, is more subtle and complicated.
When the shell encounters double-quoted text in a command, as with "Hello\n"
, it treats as an escape character when it precedes a character that can itself have special meaning inside double quotes and not otherwise.
- Because
sometimes has a special meaning inside
""
, athat immediately precedes another
has the effect of quoting that second
. So inside double quotes, the first
\
are collapsed into.
- After those first two
characters, there is a third
character which is unaffected by those first two and which precedes an
n
. Butn
is not a character that is ever treated specially inside double quotes, so thebefore it is not treated specially in this situation. Thus
n
staysn
.
The effect is that, in double quotes, \n
is interpreted as \n
.
When echo -e
sees \n
, the first removes special meaning from the second, so
echo
prints n
literally for that text.
One solution is to remove a . Running
echo -e "Hello\n"
outputs Hello
with an extra newline at the end. A better solution is to use single quotes and write echo -e 'Hellon'
. Single quotes are the strongest form of quoting. An even better solution is usually to use printf
instead of echo
, which in this case would be printf 'Hellonn'
.
Backslashes are treated specially by echo -e
, but first they are sometimes treated specially by the shell (which in this case is bash
), according to the shell's quoting rules.
The argument echo
actually sees is Hello\n
. Because you have passed -e
to echo
, it treats backslash escapes specially, and \
is collapsed to a single . The final
n
is not escaped, so it appears literally.
The reason for this is that, prior to and separately from the operation of echo
itself, the shell treats specially in some contexts but not others. Unquoted
characters are always treated specially, single-quoted
are never treated specially, but the treatment of double-quoted
characters, as in the command you ran, is more subtle and complicated.
When the shell encounters double-quoted text in a command, as with "Hello\n"
, it treats as an escape character when it precedes a character that can itself have special meaning inside double quotes and not otherwise.
- Because
sometimes has a special meaning inside
""
, athat immediately precedes another
has the effect of quoting that second
. So inside double quotes, the first
\
are collapsed into.
- After those first two
characters, there is a third
character which is unaffected by those first two and which precedes an
n
. Butn
is not a character that is ever treated specially inside double quotes, so thebefore it is not treated specially in this situation. Thus
n
staysn
.
The effect is that, in double quotes, \n
is interpreted as \n
.
When echo -e
sees \n
, the first removes special meaning from the second, so
echo
prints n
literally for that text.
One solution is to remove a . Running
echo -e "Hello\n"
outputs Hello
with an extra newline at the end. A better solution is to use single quotes and write echo -e 'Hellon'
. Single quotes are the strongest form of quoting. An even better solution is usually to use printf
instead of echo
, which in this case would be printf 'Hellonn'
.
edited 4 mins ago
John Kugelman
9167 silver badges9 bronze badges
9167 silver badges9 bronze badges
answered 8 hours ago
Eliah KaganEliah Kagan
89.4k23 gold badges249 silver badges391 bronze badges
89.4k23 gold badges249 silver badges391 bronze badges
add a comment |
add a comment |
yolin00 is a new contributor. Be nice, and check out our Code of Conduct.
yolin00 is a new contributor. Be nice, and check out our Code of Conduct.
yolin00 is a new contributor. Be nice, and check out our Code of Conduct.
yolin00 is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Ask Ubuntu!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1169851%2fwhy-dont-echo-e-commands-seem-to-produce-the-right-output%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
yes.for first 2 it should output a .and last and n make a backslash escape n(new line).so why it should print Hello
– yolin00
8 hours ago
Try it without the quotes.
– ajgringo619
8 hours ago