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









      user58029

      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 2 days ago









                terdon

                64.6k12137214




                64.6k12137214










                answered Jan 2 at 3:34









                Sergiy Kolodyazhnyy

                69.7k9144306




                69.7k9144306






























                    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.





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

                    "Incorrect syntax near the keyword 'ON'. (on update cascade, on delete cascade,)

                    Alcedinidae

                    Origin of the phrase “under your belt”?