Why don't “echo -e” commands seem to produce the right output?How can I see a history of the terminal...
How to investigate an unknown 1.5GB file named "sudo" in my Linux home directory?
Large intervals in score in Bach
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?
Heuristic argument for the Riemann Hypothesis
How smart contract transactions work?
Received email from ISP saying one of my devices has malware
Could a complex system of reaction wheels be used to propel a spacecraft?
Squares inside a square
Calculate Landau's function
In what language did Túrin converse with Mím?
What is the following VRP?
Heavy Box Stacking
What is the definition of belonging in axiomatic set theory?
How would a disabled person earn their living in a medieval-type town?
Break down the phrase "shitsurei shinakereba naranaindesu"
Is this statement about a motion being simple harmonic in nature strong?
Can two aircraft be allowed to stay on the same runway at the same time?
Create a list of snaking numbers under 50,000
How do I get my neighbour to stop disturbing with loud music?
How to run a command 1 out of N times in Bash
Don't look at what I did there
How to draw a true pie chart?
What is the practical impact of using System.Random which is not cryptographically random?
Can I leave a large suitcase at TPE during a 4-hour layover, and pick it up 4.5 days later when I come back to TPE on my way to Taipei downtown?
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
10 hours ago
Try it without the quotes.
– ajgringo619
10 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 9 hours ago
Eliah Kagan
89.4k23 gold badges249 silver badges391 bronze badges
89.4k23 gold badges249 silver badges391 bronze badges
New contributor
asked 10 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
10 hours ago
Try it without the quotes.
– ajgringo619
10 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
10 hours ago
Try it without the quotes.
– ajgringo619
10 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
10 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
10 hours ago
Try it without the quotes.
– ajgringo619
10 hours ago
Try it without the quotes.
– ajgringo619
10 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 1 hour ago
John Kugelman
9167 silver badges9 bronze badges
9167 silver badges9 bronze badges
answered 10 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
10 hours ago
Try it without the quotes.
– ajgringo619
10 hours ago