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;
}







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
    10 hours ago











  • Try it without the quotes.

    – ajgringo619
    10 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
    10 hours ago











  • Try it without the quotes.

    – ajgringo619
    10 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 9 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 10 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
    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











  • 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










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

























            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

            Taj Mahal Inhaltsverzeichnis Aufbau | Geschichte | 350-Jahr-Feier | Heutige Bedeutung | Siehe auch |...

            Baia Sprie Cuprins Etimologie | Istorie | Demografie | Politică și administrație | Arii naturale...

            Nicolae Petrescu-Găină Cuprins Biografie | Opera | In memoriam | Varia | Controverse, incertitudini...