Unexpected value of $? when using subshell

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











up vote
0
down vote

favorite












I want to check if a file exists in HDFS or not and capture it in the variable SUCCESS_FILE_CHECK, i.e., if file exists the SUCCESS_FILE_CHECK should be 0 else it can be any other value.



$ SUCCESS_FILE_CHECK=$(hdfs dfs -test -e hdfs://path/to/file)
$ echo $SUCCESS_FILE_CHECK

$ hdfs dfs -test -e hdfs://path/to/file # given this file exists
$ echo $?
0


My understanding was, if the file exists then the command within the subshell $() will return 0 and SUCCESS_FILE_CHECK will be initialized to 0. But instead when I do echo $SUCCESS_FILE_CHECK, I get nothing (irrespective of whether the file exists or not).



Also take a look at the following script:



$ SUCCESS_FILE_CHECK=$(hdfs dfs -test -e hdfs://path/to/file) # given this file exist
$ echo $?
0
$ SUCCESS_FILE_CHECK=$(hdfs dfs -test -e hdfs://path/to/file2) # given this file DOES NOT exist
$ echo $?
1


In this case, I expected the output of both the echo to be 0 since $? prints the status of the last command executed and the last command executed is an assignment (a=b) which should always return true, since the command did run successfully.



Can someone help me understand this behaviour?









share







New contributor




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























    up vote
    0
    down vote

    favorite












    I want to check if a file exists in HDFS or not and capture it in the variable SUCCESS_FILE_CHECK, i.e., if file exists the SUCCESS_FILE_CHECK should be 0 else it can be any other value.



    $ SUCCESS_FILE_CHECK=$(hdfs dfs -test -e hdfs://path/to/file)
    $ echo $SUCCESS_FILE_CHECK

    $ hdfs dfs -test -e hdfs://path/to/file # given this file exists
    $ echo $?
    0


    My understanding was, if the file exists then the command within the subshell $() will return 0 and SUCCESS_FILE_CHECK will be initialized to 0. But instead when I do echo $SUCCESS_FILE_CHECK, I get nothing (irrespective of whether the file exists or not).



    Also take a look at the following script:



    $ SUCCESS_FILE_CHECK=$(hdfs dfs -test -e hdfs://path/to/file) # given this file exist
    $ echo $?
    0
    $ SUCCESS_FILE_CHECK=$(hdfs dfs -test -e hdfs://path/to/file2) # given this file DOES NOT exist
    $ echo $?
    1


    In this case, I expected the output of both the echo to be 0 since $? prints the status of the last command executed and the last command executed is an assignment (a=b) which should always return true, since the command did run successfully.



    Can someone help me understand this behaviour?









    share







    New contributor




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





















      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      I want to check if a file exists in HDFS or not and capture it in the variable SUCCESS_FILE_CHECK, i.e., if file exists the SUCCESS_FILE_CHECK should be 0 else it can be any other value.



      $ SUCCESS_FILE_CHECK=$(hdfs dfs -test -e hdfs://path/to/file)
      $ echo $SUCCESS_FILE_CHECK

      $ hdfs dfs -test -e hdfs://path/to/file # given this file exists
      $ echo $?
      0


      My understanding was, if the file exists then the command within the subshell $() will return 0 and SUCCESS_FILE_CHECK will be initialized to 0. But instead when I do echo $SUCCESS_FILE_CHECK, I get nothing (irrespective of whether the file exists or not).



      Also take a look at the following script:



      $ SUCCESS_FILE_CHECK=$(hdfs dfs -test -e hdfs://path/to/file) # given this file exist
      $ echo $?
      0
      $ SUCCESS_FILE_CHECK=$(hdfs dfs -test -e hdfs://path/to/file2) # given this file DOES NOT exist
      $ echo $?
      1


      In this case, I expected the output of both the echo to be 0 since $? prints the status of the last command executed and the last command executed is an assignment (a=b) which should always return true, since the command did run successfully.



      Can someone help me understand this behaviour?









      share







      New contributor




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











      I want to check if a file exists in HDFS or not and capture it in the variable SUCCESS_FILE_CHECK, i.e., if file exists the SUCCESS_FILE_CHECK should be 0 else it can be any other value.



      $ SUCCESS_FILE_CHECK=$(hdfs dfs -test -e hdfs://path/to/file)
      $ echo $SUCCESS_FILE_CHECK

      $ hdfs dfs -test -e hdfs://path/to/file # given this file exists
      $ echo $?
      0


      My understanding was, if the file exists then the command within the subshell $() will return 0 and SUCCESS_FILE_CHECK will be initialized to 0. But instead when I do echo $SUCCESS_FILE_CHECK, I get nothing (irrespective of whether the file exists or not).



      Also take a look at the following script:



      $ SUCCESS_FILE_CHECK=$(hdfs dfs -test -e hdfs://path/to/file) # given this file exist
      $ echo $?
      0
      $ SUCCESS_FILE_CHECK=$(hdfs dfs -test -e hdfs://path/to/file2) # given this file DOES NOT exist
      $ echo $?
      1


      In this case, I expected the output of both the echo to be 0 since $? prints the status of the last command executed and the last command executed is an assignment (a=b) which should always return true, since the command did run successfully.



      Can someone help me understand this behaviour?







      bash subshell hadoop exit-code





      share







      New contributor




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










      share







      New contributor




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








      share



      share






      New contributor




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









      asked 3 mins ago









      Shubham

      1012




      1012




      New contributor




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





      New contributor





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






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

























          active

          oldest

          votes











          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: false,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: null,
          bindNavPrevention: true,
          postfix: "",
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );






          Shubham 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%2funix.stackexchange.com%2fquestions%2f476644%2funexpected-value-of-when-using-subshell%23new-answer', 'question_page');

          );

          Post as a guest



































          active

          oldest

          votes













          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes








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









           

          draft saved


          draft discarded


















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












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











          Shubham 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%2funix.stackexchange.com%2fquestions%2f476644%2funexpected-value-of-when-using-subshell%23new-answer', 'question_page');

          );

          Post as a guest













































































          Popular posts from this blog

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

          Bahrain

          Postfix configuration issue with fips on centos 7; mailgun relay