linux bash dictionary check if empty











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









      Kusalananda

      119k16223364




      119k16223364










      asked 2 days ago









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












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










          • nope, if the dictionary is empty.an error "ubound variable" shows.
            – focus zheng
            2 days ago










          • You can test your conditional expression on linux server and bash version >4.4.
            – focus zheng
            2 days ago










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




















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












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










            • nope, if the dictionary is empty.an error "ubound variable" shows.
              – focus zheng
              2 days ago










            • You can test your conditional expression on linux server and bash version >4.4.
              – focus zheng
              2 days ago










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

















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












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










            • nope, if the dictionary is empty.an error "ubound variable" shows.
              – focus zheng
              2 days ago










            • You can test your conditional expression on linux server and bash version >4.4.
              – focus zheng
              2 days ago










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















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

























            answered 2 days ago









            Kusalananda

            119k16223364




            119k16223364












            • Hi @kusa.I find a way to check,if [[ -z ${!dict[*]} ]];this will check if any key exist.
              – focus zheng
              2 days ago












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










            • nope, if the dictionary is empty.an error "ubound variable" shows.
              – focus zheng
              2 days ago










            • You can test your conditional expression on linux server and bash version >4.4.
              – focus zheng
              2 days ago










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




















            • Hi @kusa.I find a way to check,if [[ -z ${!dict[*]} ]];this will check if any key exist.
              – focus zheng
              2 days ago












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










            • nope, if the dictionary is empty.an error "ubound variable" shows.
              – focus zheng
              2 days ago










            • You can test your conditional expression on linux server and bash version >4.4.
              – focus zheng
              2 days ago










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


















            Hi @kusa.I find a way to check,if [[ -z ${!dict[*]} ]];this will check if any key exist.
            – focus zheng
            2 days ago






            Hi @kusa.I find a way to check,if [[ -z ${!dict[*]} ]];this will check if any key exist.
            – focus zheng
            2 days ago














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




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












            nope, if the dictionary is empty.an error "ubound variable" shows.
            – focus zheng
            2 days ago




            nope, if the dictionary is empty.an error "ubound variable" shows.
            – focus zheng
            2 days ago












            You can test your conditional expression on linux server and bash version >4.4.
            – focus zheng
            2 days ago




            You can test your conditional expression on linux server and bash version >4.4.
            – focus zheng
            2 days ago












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






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














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









                Jeff Schaller

                37.4k1052121




                37.4k1052121










                answered 2 days ago









                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

                    Accessing regular linux commands in Huawei's Dopra Linux

                    Can't connect RFCOMM socket: Host is down

                    Kernel panic - not syncing: Fatal Exception in Interrupt