linux bash dictionary check if empty

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











up vote
0
down vote

favorite












How to check if a dictionary (associative array) is empty? I just declare one using declare -A dict. I want to know if it is just declared but not have any key.










share|improve this question



























    up vote
    0
    down vote

    favorite












    How to check if a dictionary (associative array) is empty? I just declare one using declare -A dict. I want to know if it is just declared but not have any key.










    share|improve this question

























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      How to check if a dictionary (associative array) is empty? I just declare one using declare -A dict. I want to know if it is just declared but not have any key.










      share|improve this question















      How to check if a dictionary (associative array) is empty? I just declare one using declare -A dict. I want to know if it is just declared but not have any key.







      bash shell-script associative-array






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Dec 7 at 10:14









      Kusalananda

      120k16225369




      120k16225369










      asked Dec 7 at 9:56









      focus zheng

      14




      14




















          2 Answers
          2






          active

          oldest

          votes

















          up vote
          4
          down vote













          The length of (or the number of elements in) an associative array is available as $#array[@], just like for an ordinary array. If this number is zero, then the array is empty.



          if [ "$#array[@]" -ne 0 ]; then
          echo 'array is not empty'
          fi


          On an ordinary shell variable, may use the -v test to test whether it exists or not:



          if [ -v variable ]; then
          echo 'variable exists'
          fi


          ... but this does not work intuitively on arrays. You can't therefore use this reliably to determine if an array exists but is empty, or whether it hasn't been declared yet.



          The test will be true on arrays if their 0 key exists.






          share|improve this answer






















          • Hi @kusa.I find a way to check,if [[ -z $!dict[*] ]];this will check if any key exist.
            – focus zheng
            Dec 7 at 10:27











          • @focuszheng This would be better: if [ "$#dict[@]" -ne 0 ]. It's better because the shell does not have to concatenate all the keys together to create a long string.
            – Kusalananda
            Dec 7 at 10:30










          • nope, if the dictionary is empty.an error "ubound variable" shows.
            – focus zheng
            Dec 7 at 10:31










          • You can test your conditional expression on linux server and bash version >4.4.
            – focus zheng
            Dec 7 at 10:32










          • @focuszheng You will get "unbound variable" only if you run under set -u (this is not the default in bash). Also, it is unclear whether you want to check whether an array is empty or whether it is defined.
            – Kusalananda
            Dec 7 at 10:33


















          up vote
          -1
          down vote













          [ -z $!dict[*] ] && echo "yes" || echo "no" yes 


          this should be fine to check it is empty.






          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%2f486546%2flinux-bash-dictionary-check-if-empty%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown

























            2 Answers
            2






            active

            oldest

            votes








            2 Answers
            2






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes








            up vote
            4
            down vote













            The length of (or the number of elements in) an associative array is available as $#array[@], just like for an ordinary array. If this number is zero, then the array is empty.



            if [ "$#array[@]" -ne 0 ]; then
            echo 'array is not empty'
            fi


            On an ordinary shell variable, may use the -v test to test whether it exists or not:



            if [ -v variable ]; then
            echo 'variable exists'
            fi


            ... but this does not work intuitively on arrays. You can't therefore use this reliably to determine if an array exists but is empty, or whether it hasn't been declared yet.



            The test will be true on arrays if their 0 key exists.






            share|improve this answer






















            • Hi @kusa.I find a way to check,if [[ -z $!dict[*] ]];this will check if any key exist.
              – focus zheng
              Dec 7 at 10:27











            • @focuszheng This would be better: if [ "$#dict[@]" -ne 0 ]. It's better because the shell does not have to concatenate all the keys together to create a long string.
              – Kusalananda
              Dec 7 at 10:30










            • nope, if the dictionary is empty.an error "ubound variable" shows.
              – focus zheng
              Dec 7 at 10:31










            • You can test your conditional expression on linux server and bash version >4.4.
              – focus zheng
              Dec 7 at 10:32










            • @focuszheng You will get "unbound variable" only if you run under set -u (this is not the default in bash). Also, it is unclear whether you want to check whether an array is empty or whether it is defined.
              – Kusalananda
              Dec 7 at 10:33















            up vote
            4
            down vote













            The length of (or the number of elements in) an associative array is available as $#array[@], just like for an ordinary array. If this number is zero, then the array is empty.



            if [ "$#array[@]" -ne 0 ]; then
            echo 'array is not empty'
            fi


            On an ordinary shell variable, may use the -v test to test whether it exists or not:



            if [ -v variable ]; then
            echo 'variable exists'
            fi


            ... but this does not work intuitively on arrays. You can't therefore use this reliably to determine if an array exists but is empty, or whether it hasn't been declared yet.



            The test will be true on arrays if their 0 key exists.






            share|improve this answer






















            • Hi @kusa.I find a way to check,if [[ -z $!dict[*] ]];this will check if any key exist.
              – focus zheng
              Dec 7 at 10:27











            • @focuszheng This would be better: if [ "$#dict[@]" -ne 0 ]. It's better because the shell does not have to concatenate all the keys together to create a long string.
              – Kusalananda
              Dec 7 at 10:30










            • nope, if the dictionary is empty.an error "ubound variable" shows.
              – focus zheng
              Dec 7 at 10:31










            • You can test your conditional expression on linux server and bash version >4.4.
              – focus zheng
              Dec 7 at 10:32










            • @focuszheng You will get "unbound variable" only if you run under set -u (this is not the default in bash). Also, it is unclear whether you want to check whether an array is empty or whether it is defined.
              – Kusalananda
              Dec 7 at 10:33













            up vote
            4
            down vote










            up vote
            4
            down vote









            The length of (or the number of elements in) an associative array is available as $#array[@], just like for an ordinary array. If this number is zero, then the array is empty.



            if [ "$#array[@]" -ne 0 ]; then
            echo 'array is not empty'
            fi


            On an ordinary shell variable, may use the -v test to test whether it exists or not:



            if [ -v variable ]; then
            echo 'variable exists'
            fi


            ... but this does not work intuitively on arrays. You can't therefore use this reliably to determine if an array exists but is empty, or whether it hasn't been declared yet.



            The test will be true on arrays if their 0 key exists.






            share|improve this answer














            The length of (or the number of elements in) an associative array is available as $#array[@], just like for an ordinary array. If this number is zero, then the array is empty.



            if [ "$#array[@]" -ne 0 ]; then
            echo 'array is not empty'
            fi


            On an ordinary shell variable, may use the -v test to test whether it exists or not:



            if [ -v variable ]; then
            echo 'variable exists'
            fi


            ... but this does not work intuitively on arrays. You can't therefore use this reliably to determine if an array exists but is empty, or whether it hasn't been declared yet.



            The test will be true on arrays if their 0 key exists.







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Dec 7 at 10:31

























            answered Dec 7 at 10:01









            Kusalananda

            120k16225369




            120k16225369











            • Hi @kusa.I find a way to check,if [[ -z $!dict[*] ]];this will check if any key exist.
              – focus zheng
              Dec 7 at 10:27











            • @focuszheng This would be better: if [ "$#dict[@]" -ne 0 ]. It's better because the shell does not have to concatenate all the keys together to create a long string.
              – Kusalananda
              Dec 7 at 10:30










            • nope, if the dictionary is empty.an error "ubound variable" shows.
              – focus zheng
              Dec 7 at 10:31










            • You can test your conditional expression on linux server and bash version >4.4.
              – focus zheng
              Dec 7 at 10:32










            • @focuszheng You will get "unbound variable" only if you run under set -u (this is not the default in bash). Also, it is unclear whether you want to check whether an array is empty or whether it is defined.
              – Kusalananda
              Dec 7 at 10:33

















            • Hi @kusa.I find a way to check,if [[ -z $!dict[*] ]];this will check if any key exist.
              – focus zheng
              Dec 7 at 10:27











            • @focuszheng This would be better: if [ "$#dict[@]" -ne 0 ]. It's better because the shell does not have to concatenate all the keys together to create a long string.
              – Kusalananda
              Dec 7 at 10:30










            • nope, if the dictionary is empty.an error "ubound variable" shows.
              – focus zheng
              Dec 7 at 10:31










            • You can test your conditional expression on linux server and bash version >4.4.
              – focus zheng
              Dec 7 at 10:32










            • @focuszheng You will get "unbound variable" only if you run under set -u (this is not the default in bash). Also, it is unclear whether you want to check whether an array is empty or whether it is defined.
              – Kusalananda
              Dec 7 at 10:33
















            Hi @kusa.I find a way to check,if [[ -z $!dict[*] ]];this will check if any key exist.
            – focus zheng
            Dec 7 at 10:27





            Hi @kusa.I find a way to check,if [[ -z $!dict[*] ]];this will check if any key exist.
            – focus zheng
            Dec 7 at 10:27













            @focuszheng This would be better: if [ "$#dict[@]" -ne 0 ]. It's better because the shell does not have to concatenate all the keys together to create a long string.
            – Kusalananda
            Dec 7 at 10:30




            @focuszheng This would be better: if [ "$#dict[@]" -ne 0 ]. It's better because the shell does not have to concatenate all the keys together to create a long string.
            – Kusalananda
            Dec 7 at 10:30












            nope, if the dictionary is empty.an error "ubound variable" shows.
            – focus zheng
            Dec 7 at 10:31




            nope, if the dictionary is empty.an error "ubound variable" shows.
            – focus zheng
            Dec 7 at 10:31












            You can test your conditional expression on linux server and bash version >4.4.
            – focus zheng
            Dec 7 at 10:32




            You can test your conditional expression on linux server and bash version >4.4.
            – focus zheng
            Dec 7 at 10:32












            @focuszheng You will get "unbound variable" only if you run under set -u (this is not the default in bash). Also, it is unclear whether you want to check whether an array is empty or whether it is defined.
            – Kusalananda
            Dec 7 at 10:33





            @focuszheng You will get "unbound variable" only if you run under set -u (this is not the default in bash). Also, it is unclear whether you want to check whether an array is empty or whether it is defined.
            – Kusalananda
            Dec 7 at 10:33













            up vote
            -1
            down vote













            [ -z $!dict[*] ] && echo "yes" || echo "no" yes 


            this should be fine to check it is empty.






            share|improve this answer


























              up vote
              -1
              down vote













              [ -z $!dict[*] ] && echo "yes" || echo "no" yes 


              this should be fine to check it is empty.






              share|improve this answer
























                up vote
                -1
                down vote










                up vote
                -1
                down vote









                [ -z $!dict[*] ] && echo "yes" || echo "no" yes 


                this should be fine to check it is empty.






                share|improve this answer














                [ -z $!dict[*] ] && echo "yes" || echo "no" yes 


                this should be fine to check it is empty.







                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited Dec 7 at 12:40









                Jeff Schaller

                37.9k1053123




                37.9k1053123










                answered Dec 7 at 10:44









                focus zheng

                14




                14



























                    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%2f486546%2flinux-bash-dictionary-check-if-empty%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?

                    Bahrain

                    Postfix configuration issue with fips on centos 7; mailgun relay