read command with ??? input

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP











up vote
1
down vote

favorite












Why when reading input with read, and the input is ??? the result is bin src?



$ read
???
$ echo $REPLY
bin src


Running bash on macOS.










share|improve this question



























    up vote
    1
    down vote

    favorite












    Why when reading input with read, and the input is ??? the result is bin src?



    $ read
    ???
    $ echo $REPLY
    bin src


    Running bash on macOS.










    share|improve this question

























      up vote
      1
      down vote

      favorite









      up vote
      1
      down vote

      favorite











      Why when reading input with read, and the input is ??? the result is bin src?



      $ read
      ???
      $ echo $REPLY
      bin src


      Running bash on macOS.










      share|improve this question















      Why when reading input with read, and the input is ??? the result is bin src?



      $ read
      ???
      $ echo $REPLY
      bin src


      Running bash on macOS.







      bash osx read






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 22 at 21:18









      Kusalananda

      118k16221360




      118k16221360










      asked Nov 22 at 18:30









      YardenST

      1286




      1286




















          1 Answer
          1






          active

          oldest

          votes

















          up vote
          3
          down vote



          accepted










          The data held in the variable REPLY is still ???, but the result from using the variable unquoted with echo, like you are doing, is the same as doing



          echo ???


          You need to double quote all variable expansions.



          When you leave a variable expansion unquoted, two things happens:



          1. The value of the variable is split into multiple words. The splitting happens wherever a character is the same as one of the characters in $IFS (a space, tab and a newline by default). In your case, the result of the splitting is the same as before the splitting (the single word ???) if the value of $IFS is not modified.

          2. Each generated word undergoes filename generation, or "filename globbing". That means that if a word is a globbing pattern, which ??? is, any filenames matching that pattern will replace the pattern. The pattern ??? matches any three character long filename and you obviously have two of those in your current working directory.

          Neither of these things happens if the variable expansion is double-quoted.



          Example, recreating your issue and solving it:



          $ ls
          X11R6 games lib libexec mdec ports share xobj
          bin include libdata local obj sbin src
          $ read
          ???
          $ echo $REPLY
          bin lib obj src
          $ echo ???
          bin lib obj src
          $ echo "$REPLY"
          ???


          Another example in the same directory as above, showing that the string that I input is split into two words (??? and s*) and that these then gets used as filename globbing patterns:



          $ read
          ??? s*
          $ echo $REPLY
          bin lib obj src sbin share src
          $ echo "$REPLY"
          ??? s*


          Notice that src gets outputted twice as it matches both ??? and s*.



          Related:



          • Why does my shell script choke on whitespace or other special characters?

          • When is double-quoting necessary?

          Short summary of the above questions and answers: Always double quote all expansions, unless you know exactly which ones don't need it or if you actually want to invoke splitting and globbing.






          share|improve this answer






















            Your Answer








            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "106"
            ;
            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',
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            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
            );



            );













            draft saved

            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f483510%2fread-command-with-input%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








            up vote
            3
            down vote



            accepted










            The data held in the variable REPLY is still ???, but the result from using the variable unquoted with echo, like you are doing, is the same as doing



            echo ???


            You need to double quote all variable expansions.



            When you leave a variable expansion unquoted, two things happens:



            1. The value of the variable is split into multiple words. The splitting happens wherever a character is the same as one of the characters in $IFS (a space, tab and a newline by default). In your case, the result of the splitting is the same as before the splitting (the single word ???) if the value of $IFS is not modified.

            2. Each generated word undergoes filename generation, or "filename globbing". That means that if a word is a globbing pattern, which ??? is, any filenames matching that pattern will replace the pattern. The pattern ??? matches any three character long filename and you obviously have two of those in your current working directory.

            Neither of these things happens if the variable expansion is double-quoted.



            Example, recreating your issue and solving it:



            $ ls
            X11R6 games lib libexec mdec ports share xobj
            bin include libdata local obj sbin src
            $ read
            ???
            $ echo $REPLY
            bin lib obj src
            $ echo ???
            bin lib obj src
            $ echo "$REPLY"
            ???


            Another example in the same directory as above, showing that the string that I input is split into two words (??? and s*) and that these then gets used as filename globbing patterns:



            $ read
            ??? s*
            $ echo $REPLY
            bin lib obj src sbin share src
            $ echo "$REPLY"
            ??? s*


            Notice that src gets outputted twice as it matches both ??? and s*.



            Related:



            • Why does my shell script choke on whitespace or other special characters?

            • When is double-quoting necessary?

            Short summary of the above questions and answers: Always double quote all expansions, unless you know exactly which ones don't need it or if you actually want to invoke splitting and globbing.






            share|improve this answer


























              up vote
              3
              down vote



              accepted










              The data held in the variable REPLY is still ???, but the result from using the variable unquoted with echo, like you are doing, is the same as doing



              echo ???


              You need to double quote all variable expansions.



              When you leave a variable expansion unquoted, two things happens:



              1. The value of the variable is split into multiple words. The splitting happens wherever a character is the same as one of the characters in $IFS (a space, tab and a newline by default). In your case, the result of the splitting is the same as before the splitting (the single word ???) if the value of $IFS is not modified.

              2. Each generated word undergoes filename generation, or "filename globbing". That means that if a word is a globbing pattern, which ??? is, any filenames matching that pattern will replace the pattern. The pattern ??? matches any three character long filename and you obviously have two of those in your current working directory.

              Neither of these things happens if the variable expansion is double-quoted.



              Example, recreating your issue and solving it:



              $ ls
              X11R6 games lib libexec mdec ports share xobj
              bin include libdata local obj sbin src
              $ read
              ???
              $ echo $REPLY
              bin lib obj src
              $ echo ???
              bin lib obj src
              $ echo "$REPLY"
              ???


              Another example in the same directory as above, showing that the string that I input is split into two words (??? and s*) and that these then gets used as filename globbing patterns:



              $ read
              ??? s*
              $ echo $REPLY
              bin lib obj src sbin share src
              $ echo "$REPLY"
              ??? s*


              Notice that src gets outputted twice as it matches both ??? and s*.



              Related:



              • Why does my shell script choke on whitespace or other special characters?

              • When is double-quoting necessary?

              Short summary of the above questions and answers: Always double quote all expansions, unless you know exactly which ones don't need it or if you actually want to invoke splitting and globbing.






              share|improve this answer
























                up vote
                3
                down vote



                accepted







                up vote
                3
                down vote



                accepted






                The data held in the variable REPLY is still ???, but the result from using the variable unquoted with echo, like you are doing, is the same as doing



                echo ???


                You need to double quote all variable expansions.



                When you leave a variable expansion unquoted, two things happens:



                1. The value of the variable is split into multiple words. The splitting happens wherever a character is the same as one of the characters in $IFS (a space, tab and a newline by default). In your case, the result of the splitting is the same as before the splitting (the single word ???) if the value of $IFS is not modified.

                2. Each generated word undergoes filename generation, or "filename globbing". That means that if a word is a globbing pattern, which ??? is, any filenames matching that pattern will replace the pattern. The pattern ??? matches any three character long filename and you obviously have two of those in your current working directory.

                Neither of these things happens if the variable expansion is double-quoted.



                Example, recreating your issue and solving it:



                $ ls
                X11R6 games lib libexec mdec ports share xobj
                bin include libdata local obj sbin src
                $ read
                ???
                $ echo $REPLY
                bin lib obj src
                $ echo ???
                bin lib obj src
                $ echo "$REPLY"
                ???


                Another example in the same directory as above, showing that the string that I input is split into two words (??? and s*) and that these then gets used as filename globbing patterns:



                $ read
                ??? s*
                $ echo $REPLY
                bin lib obj src sbin share src
                $ echo "$REPLY"
                ??? s*


                Notice that src gets outputted twice as it matches both ??? and s*.



                Related:



                • Why does my shell script choke on whitespace or other special characters?

                • When is double-quoting necessary?

                Short summary of the above questions and answers: Always double quote all expansions, unless you know exactly which ones don't need it or if you actually want to invoke splitting and globbing.






                share|improve this answer














                The data held in the variable REPLY is still ???, but the result from using the variable unquoted with echo, like you are doing, is the same as doing



                echo ???


                You need to double quote all variable expansions.



                When you leave a variable expansion unquoted, two things happens:



                1. The value of the variable is split into multiple words. The splitting happens wherever a character is the same as one of the characters in $IFS (a space, tab and a newline by default). In your case, the result of the splitting is the same as before the splitting (the single word ???) if the value of $IFS is not modified.

                2. Each generated word undergoes filename generation, or "filename globbing". That means that if a word is a globbing pattern, which ??? is, any filenames matching that pattern will replace the pattern. The pattern ??? matches any three character long filename and you obviously have two of those in your current working directory.

                Neither of these things happens if the variable expansion is double-quoted.



                Example, recreating your issue and solving it:



                $ ls
                X11R6 games lib libexec mdec ports share xobj
                bin include libdata local obj sbin src
                $ read
                ???
                $ echo $REPLY
                bin lib obj src
                $ echo ???
                bin lib obj src
                $ echo "$REPLY"
                ???


                Another example in the same directory as above, showing that the string that I input is split into two words (??? and s*) and that these then gets used as filename globbing patterns:



                $ read
                ??? s*
                $ echo $REPLY
                bin lib obj src sbin share src
                $ echo "$REPLY"
                ??? s*


                Notice that src gets outputted twice as it matches both ??? and s*.



                Related:



                • Why does my shell script choke on whitespace or other special characters?

                • When is double-quoting necessary?

                Short summary of the above questions and answers: Always double quote all expansions, unless you know exactly which ones don't need it or if you actually want to invoke splitting and globbing.







                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited Nov 22 at 21:19

























                answered Nov 22 at 18:38









                Kusalananda

                118k16221360




                118k16221360



























                    draft saved

                    draft discarded
















































                    Thanks for contributing an answer to Unix & Linux Stack Exchange!


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





                    Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                    Please pay close attention to the following guidance:


                    • 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%2funix.stackexchange.com%2fquestions%2f483510%2fread-command-with-input%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

                    How to check contact read email or not when send email to Individual?

                    Displaying single band from multi-band raster using QGIS

                    How many registers does an x86_64 CPU actually have?