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;








5















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









share|improve this question









New contributor



yolin00 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





















  • 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

















5















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









share|improve this question









New contributor



yolin00 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





















  • 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













5












5








5








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









share|improve this question









New contributor



yolin00 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











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






share|improve this question









New contributor



yolin00 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.










share|improve this question









New contributor



yolin00 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.








share|improve this question




share|improve this question








edited 8 hours ago









Eliah Kagan

89.4k23 gold badges249 silver badges391 bronze badges




89.4k23 gold badges249 silver badges391 bronze badges






New contributor



yolin00 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.








asked 9 hours ago









yolin00yolin00

262 bronze badges




262 bronze badges




New contributor



yolin00 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




New contributor




yolin00 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.

















  • 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











  • 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










1 Answer
1






active

oldest

votes


















7















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.



  1. Because sometimes has a special meaning inside "", a that immediately precedes another has the effect of quoting that second . So inside double quotes, the first \ are collapsed into .

  2. After those first two characters, there is a third character which is unaffected by those first two and which precedes an n. But n is not a character that is ever treated specially inside double quotes, so the before it is not treated specially in this situation. Thus n stays n.

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'.






share|improve this answer





























    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.









    draft saved

    draft discarded


















    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









    7















    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.



    1. Because sometimes has a special meaning inside "", a that immediately precedes another has the effect of quoting that second . So inside double quotes, the first \ are collapsed into .

    2. After those first two characters, there is a third character which is unaffected by those first two and which precedes an n. But n is not a character that is ever treated specially inside double quotes, so the before it is not treated specially in this situation. Thus n stays n.

    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'.






    share|improve this answer































      7















      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.



      1. Because sometimes has a special meaning inside "", a that immediately precedes another has the effect of quoting that second . So inside double quotes, the first \ are collapsed into .

      2. After those first two characters, there is a third character which is unaffected by those first two and which precedes an n. But n is not a character that is ever treated specially inside double quotes, so the before it is not treated specially in this situation. Thus n stays n.

      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'.






      share|improve this answer





























        7














        7










        7









        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.



        1. Because sometimes has a special meaning inside "", a that immediately precedes another has the effect of quoting that second . So inside double quotes, the first \ are collapsed into .

        2. After those first two characters, there is a third character which is unaffected by those first two and which precedes an n. But n is not a character that is ever treated specially inside double quotes, so the before it is not treated specially in this situation. Thus n stays n.

        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'.






        share|improve this answer















        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.



        1. Because sometimes has a special meaning inside "", a that immediately precedes another has the effect of quoting that second . So inside double quotes, the first \ are collapsed into .

        2. After those first two characters, there is a third character which is unaffected by those first two and which precedes an n. But n is not a character that is ever treated specially inside double quotes, so the before it is not treated specially in this situation. Thus n stays n.

        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'.







        share|improve this answer














        share|improve this answer



        share|improve this answer








        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























            yolin00 is a new contributor. Be nice, and check out our Code of Conduct.









            draft saved

            draft discarded


















            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.




            draft saved


            draft discarded














            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





















































            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







            Popular posts from this blog

            Invision Community Contents History See also References External links Navigation menuProprietaryinvisioncommunity.comIPS Community ForumsIPS Community Forumsthis blog entry"License Changes, IP.Board 3.4, and the Future""Interview -- Matt Mecham of Ibforums""CEO Invision Power Board, Matt Mecham Is a Liar, Thief!"IPB License Explanation 1.3, 1.3.1, 2.0, and 2.1ArchivedSecurity Fixes, Updates And Enhancements For IPB 1.3.1Archived"New Demo Accounts - Invision Power Services"the original"New Default Skin"the original"Invision Power Board 3.0.0 and Applications Released"the original"Archived copy"the original"Perpetual licenses being done away with""Release Notes - Invision Power Services""Introducing: IPS Community Suite 4!"Invision Community Release Notes

            Canceling a color specificationRandomly assigning color to Graphics3D objects?Default color for Filling in Mathematica 9Coloring specific elements of sets with a prime modified order in an array plotHow to pick a color differing significantly from the colors already in a given color list?Detection of the text colorColor numbers based on their valueCan color schemes for use with ColorData include opacity specification?My dynamic color schemes

            Ласкавець круглолистий Зміст Опис | Поширення | Галерея | Примітки | Посилання | Навігаційне меню58171138361-22960890446Bupleurum rotundifoliumEuro+Med PlantbasePlants of the World Online — Kew ScienceGermplasm Resources Information Network (GRIN)Ласкавецькн. VI : Літери Ком — Левиправивши або дописавши її