AWK: Why $* works inside bash function but not under pipe?












2















@terdon in this post answered the related question of mine, but I missed one more question in that post.



Plz refer to the following commands:



calc(){ awk "BEGIN{ print $* }" ;}; calc "((3+(2^3)) * 34^2 / 9)-75.89"


The above commands work fine with calculated result '1337'.



echo '((3+(2^3)) * 34^2 / 9)-75.89' | awk "BEGIN{ print $* }"


But the above commands don't give any result while @terdon explained well about why.



Could you advise what made the first example work with $*?










share|improve this question



























    2















    @terdon in this post answered the related question of mine, but I missed one more question in that post.



    Plz refer to the following commands:



    calc(){ awk "BEGIN{ print $* }" ;}; calc "((3+(2^3)) * 34^2 / 9)-75.89"


    The above commands work fine with calculated result '1337'.



    echo '((3+(2^3)) * 34^2 / 9)-75.89' | awk "BEGIN{ print $* }"


    But the above commands don't give any result while @terdon explained well about why.



    Could you advise what made the first example work with $*?










    share|improve this question

























      2












      2








      2


      1






      @terdon in this post answered the related question of mine, but I missed one more question in that post.



      Plz refer to the following commands:



      calc(){ awk "BEGIN{ print $* }" ;}; calc "((3+(2^3)) * 34^2 / 9)-75.89"


      The above commands work fine with calculated result '1337'.



      echo '((3+(2^3)) * 34^2 / 9)-75.89' | awk "BEGIN{ print $* }"


      But the above commands don't give any result while @terdon explained well about why.



      Could you advise what made the first example work with $*?










      share|improve this question














      @terdon in this post answered the related question of mine, but I missed one more question in that post.



      Plz refer to the following commands:



      calc(){ awk "BEGIN{ print $* }" ;}; calc "((3+(2^3)) * 34^2 / 9)-75.89"


      The above commands work fine with calculated result '1337'.



      echo '((3+(2^3)) * 34^2 / 9)-75.89' | awk "BEGIN{ print $* }"


      But the above commands don't give any result while @terdon explained well about why.



      Could you advise what made the first example work with $*?







      awk






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Jan 2 at 3:11









      user58029user58029

      615




      615






















          1 Answer
          1






          active

          oldest

          votes


















          3














          $* refers to positional parameters - those variables which are referenced by $1 and $2 and so on, and are provided as arguments to scripts and functions. That's the key to your question.



          When you have interactive shell , there's no positional parameters set by default, so $* is empty. You can make it work if you set those via set "((3+(2^3)) * 34^2 / 9)-75.89" command, which will make $1 equal to that string.



          The difference with calc(){ awk "BEGIN{ print $* }" ;}; is that it's a function and functions can process positional parameters (theirs, not the shell's). When you call calc "((3+(2^3)) * 34^2 / 9)-75.89" you're calling a function with positional parameter "((3+(2^3)) * 34^2 / 9)-75.89". There $* won't be empty:



          $ calc(){ echo "Params: '$*'"; awk "BEGIN{ print $* }" ;}; calc "((3+(2^3)) * 34^2 / 9)-75.89"
          Params: '((3+(2^3)) * 34^2 / 9)-75.89'
          1337





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


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1106151%2fawk-why-works-inside-bash-function-but-not-under-pipe%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









            3














            $* refers to positional parameters - those variables which are referenced by $1 and $2 and so on, and are provided as arguments to scripts and functions. That's the key to your question.



            When you have interactive shell , there's no positional parameters set by default, so $* is empty. You can make it work if you set those via set "((3+(2^3)) * 34^2 / 9)-75.89" command, which will make $1 equal to that string.



            The difference with calc(){ awk "BEGIN{ print $* }" ;}; is that it's a function and functions can process positional parameters (theirs, not the shell's). When you call calc "((3+(2^3)) * 34^2 / 9)-75.89" you're calling a function with positional parameter "((3+(2^3)) * 34^2 / 9)-75.89". There $* won't be empty:



            $ calc(){ echo "Params: '$*'"; awk "BEGIN{ print $* }" ;}; calc "((3+(2^3)) * 34^2 / 9)-75.89"
            Params: '((3+(2^3)) * 34^2 / 9)-75.89'
            1337





            share|improve this answer






























              3














              $* refers to positional parameters - those variables which are referenced by $1 and $2 and so on, and are provided as arguments to scripts and functions. That's the key to your question.



              When you have interactive shell , there's no positional parameters set by default, so $* is empty. You can make it work if you set those via set "((3+(2^3)) * 34^2 / 9)-75.89" command, which will make $1 equal to that string.



              The difference with calc(){ awk "BEGIN{ print $* }" ;}; is that it's a function and functions can process positional parameters (theirs, not the shell's). When you call calc "((3+(2^3)) * 34^2 / 9)-75.89" you're calling a function with positional parameter "((3+(2^3)) * 34^2 / 9)-75.89". There $* won't be empty:



              $ calc(){ echo "Params: '$*'"; awk "BEGIN{ print $* }" ;}; calc "((3+(2^3)) * 34^2 / 9)-75.89"
              Params: '((3+(2^3)) * 34^2 / 9)-75.89'
              1337





              share|improve this answer




























                3












                3








                3







                $* refers to positional parameters - those variables which are referenced by $1 and $2 and so on, and are provided as arguments to scripts and functions. That's the key to your question.



                When you have interactive shell , there's no positional parameters set by default, so $* is empty. You can make it work if you set those via set "((3+(2^3)) * 34^2 / 9)-75.89" command, which will make $1 equal to that string.



                The difference with calc(){ awk "BEGIN{ print $* }" ;}; is that it's a function and functions can process positional parameters (theirs, not the shell's). When you call calc "((3+(2^3)) * 34^2 / 9)-75.89" you're calling a function with positional parameter "((3+(2^3)) * 34^2 / 9)-75.89". There $* won't be empty:



                $ calc(){ echo "Params: '$*'"; awk "BEGIN{ print $* }" ;}; calc "((3+(2^3)) * 34^2 / 9)-75.89"
                Params: '((3+(2^3)) * 34^2 / 9)-75.89'
                1337





                share|improve this answer















                $* refers to positional parameters - those variables which are referenced by $1 and $2 and so on, and are provided as arguments to scripts and functions. That's the key to your question.



                When you have interactive shell , there's no positional parameters set by default, so $* is empty. You can make it work if you set those via set "((3+(2^3)) * 34^2 / 9)-75.89" command, which will make $1 equal to that string.



                The difference with calc(){ awk "BEGIN{ print $* }" ;}; is that it's a function and functions can process positional parameters (theirs, not the shell's). When you call calc "((3+(2^3)) * 34^2 / 9)-75.89" you're calling a function with positional parameter "((3+(2^3)) * 34^2 / 9)-75.89". There $* won't be empty:



                $ calc(){ echo "Params: '$*'"; awk "BEGIN{ print $* }" ;}; calc "((3+(2^3)) * 34^2 / 9)-75.89"
                Params: '((3+(2^3)) * 34^2 / 9)-75.89'
                1337






                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited Jan 2 at 9:32









                terdon

                65.3k12138218




                65.3k12138218










                answered Jan 2 at 3:34









                Sergiy KolodyazhnyySergiy Kolodyazhnyy

                70.9k9147310




                70.9k9147310






























                    draft saved

                    draft discarded




















































                    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%2f1106151%2fawk-why-works-inside-bash-function-but-not-under-pipe%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

                    Probability when a professor distributes a quiz and homework assignment to a class of n students.

                    Aardman Animations

                    Are they similar matrix