Exit statuses of comparisons in test constructsPOSIX test and -adifference between non-builtin 'test' and...

What is the meaning of option 'by' in TikZ Intersections

Did Amazon pay $0 in taxes last year?

How to chmod files that have a specific set of permissions

Learning to quickly identify valid fingering for piano?

Remove object from array based on array of some property of that object

Why is there an extra space when I type "ls" on the Desktop?

Can a Mimic (container form) actually hold loot?

Forcing Mathematica's Integrate to give more general answers

What does "rhumatis" mean?

School performs periodic password audits. Is my password compromised?

How do you make a gun that shoots melee weapons and/or swords?

The (Easy) Road to Code

Is divide-by-zero a security vulnerability?

A bug in Excel? Conditional formatting for marking duplicates also highlights unique value

How spaceships determine each other's mass in space?

Affine transformation of circular arc in 3D

In the world of The Matrix, what is "popping"?

Align equations with text before one of them

Giving a talk in my old university, how prominently should I tell students my salary?

What does it mean when I add a new variable to my linear model and the R^2 stays the same?

Exit statuses of comparisons in test constructs

Can a Mexican citizen living in US under DACA drive to Canada?

Calculate total length of edges in select Voronoi diagram

Faulty RAID1 disk now shows as foreign



Exit statuses of comparisons in test constructs


POSIX test and -adifference between non-builtin 'test' and '['unix test when to use eq vs = vs == in test commands?What does `[ EXPRESSION ], [ ] and [OPTION` mean in `man test`?-n Vs !(exclamation mark) behaves differently with test commandDifference in conditions /test( test -n $st ) != ( test -z $st ) right?How to test list of proxy servers?Bash test: what does “=~” do?How to correctly test file's extension in if statement?













3















I was writing some "if then" statements and found what seemed to me an odd behavior. Upon investigation I realized that it boiled down to the exit code of the comparison I was making. I illustrate my findings in the following code snippet.



As you can see



rc=1
[ $rc -eq 0 ]
es_num=$?
[ $rc=0 ]
es_str=$?
echo "es_num is $es_num"
echo "es_str is $es_str"


Outputs



es_num is 1
es_str is 0


Is there any documentation, preferably from the POSIX standards, that talks about the difference in the exit statuses of -eq and = in a test construct?



What should I be aware of when writing conditional statements? What are some best practices regarding this?



Portable code is preferable to Bash code (which I'm using).










share|improve this question









New contributor




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





















  • I didn't know about the space being necessary. What I meant with "odd" is "weird if you read as pseudo code, ignoring the quirks of the language". Thanks. @ilkkachu

    – Elegance
    3 hours ago








  • 1





    The only way I can get [ $rc=0 ] to fail with rc=1 is to set IFS to 1 as well. That would cause both tests to error out and set $? to 2 (in bash).

    – Kusalananda
    3 hours ago











  • @ilkkachu There was a typo. Of course I can't ignore them, but if I knew them, I wouldn't have to ask. That's exactly the point of the question.

    – Elegance
    1 hour ago













  • @Elegance, ok, good, thanks. And yes, you're right, you wouldn't have to ask if you knew. It's just that even a typo like that can send the readers off in the wrong direction, looking for some really weird edge case that could explain the result. (The shell can be a bit quirky sometimes so there might have been a remote possibility of an edge case where both would return 1...)

    – ilkkachu
    1 hour ago













  • @ilkkachu Thank you for the helpful feedback.

    – Elegance
    1 hour ago
















3















I was writing some "if then" statements and found what seemed to me an odd behavior. Upon investigation I realized that it boiled down to the exit code of the comparison I was making. I illustrate my findings in the following code snippet.



As you can see



rc=1
[ $rc -eq 0 ]
es_num=$?
[ $rc=0 ]
es_str=$?
echo "es_num is $es_num"
echo "es_str is $es_str"


Outputs



es_num is 1
es_str is 0


Is there any documentation, preferably from the POSIX standards, that talks about the difference in the exit statuses of -eq and = in a test construct?



What should I be aware of when writing conditional statements? What are some best practices regarding this?



Portable code is preferable to Bash code (which I'm using).










share|improve this question









New contributor




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





















  • I didn't know about the space being necessary. What I meant with "odd" is "weird if you read as pseudo code, ignoring the quirks of the language". Thanks. @ilkkachu

    – Elegance
    3 hours ago








  • 1





    The only way I can get [ $rc=0 ] to fail with rc=1 is to set IFS to 1 as well. That would cause both tests to error out and set $? to 2 (in bash).

    – Kusalananda
    3 hours ago











  • @ilkkachu There was a typo. Of course I can't ignore them, but if I knew them, I wouldn't have to ask. That's exactly the point of the question.

    – Elegance
    1 hour ago













  • @Elegance, ok, good, thanks. And yes, you're right, you wouldn't have to ask if you knew. It's just that even a typo like that can send the readers off in the wrong direction, looking for some really weird edge case that could explain the result. (The shell can be a bit quirky sometimes so there might have been a remote possibility of an edge case where both would return 1...)

    – ilkkachu
    1 hour ago













  • @ilkkachu Thank you for the helpful feedback.

    – Elegance
    1 hour ago














3












3








3








I was writing some "if then" statements and found what seemed to me an odd behavior. Upon investigation I realized that it boiled down to the exit code of the comparison I was making. I illustrate my findings in the following code snippet.



As you can see



rc=1
[ $rc -eq 0 ]
es_num=$?
[ $rc=0 ]
es_str=$?
echo "es_num is $es_num"
echo "es_str is $es_str"


Outputs



es_num is 1
es_str is 0


Is there any documentation, preferably from the POSIX standards, that talks about the difference in the exit statuses of -eq and = in a test construct?



What should I be aware of when writing conditional statements? What are some best practices regarding this?



Portable code is preferable to Bash code (which I'm using).










share|improve this question









New contributor




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












I was writing some "if then" statements and found what seemed to me an odd behavior. Upon investigation I realized that it boiled down to the exit code of the comparison I was making. I illustrate my findings in the following code snippet.



As you can see



rc=1
[ $rc -eq 0 ]
es_num=$?
[ $rc=0 ]
es_str=$?
echo "es_num is $es_num"
echo "es_str is $es_str"


Outputs



es_num is 1
es_str is 0


Is there any documentation, preferably from the POSIX standards, that talks about the difference in the exit statuses of -eq and = in a test construct?



What should I be aware of when writing conditional statements? What are some best practices regarding this?



Portable code is preferable to Bash code (which I'm using).







test control-flow






share|improve this question









New contributor




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











share|improve this question









New contributor




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









share|improve this question




share|improve this question








edited 1 hour ago







Elegance













New contributor




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









asked 4 hours ago









EleganceElegance

183




183




New contributor




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





New contributor





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






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













  • I didn't know about the space being necessary. What I meant with "odd" is "weird if you read as pseudo code, ignoring the quirks of the language". Thanks. @ilkkachu

    – Elegance
    3 hours ago








  • 1





    The only way I can get [ $rc=0 ] to fail with rc=1 is to set IFS to 1 as well. That would cause both tests to error out and set $? to 2 (in bash).

    – Kusalananda
    3 hours ago











  • @ilkkachu There was a typo. Of course I can't ignore them, but if I knew them, I wouldn't have to ask. That's exactly the point of the question.

    – Elegance
    1 hour ago













  • @Elegance, ok, good, thanks. And yes, you're right, you wouldn't have to ask if you knew. It's just that even a typo like that can send the readers off in the wrong direction, looking for some really weird edge case that could explain the result. (The shell can be a bit quirky sometimes so there might have been a remote possibility of an edge case where both would return 1...)

    – ilkkachu
    1 hour ago













  • @ilkkachu Thank you for the helpful feedback.

    – Elegance
    1 hour ago



















  • I didn't know about the space being necessary. What I meant with "odd" is "weird if you read as pseudo code, ignoring the quirks of the language". Thanks. @ilkkachu

    – Elegance
    3 hours ago








  • 1





    The only way I can get [ $rc=0 ] to fail with rc=1 is to set IFS to 1 as well. That would cause both tests to error out and set $? to 2 (in bash).

    – Kusalananda
    3 hours ago











  • @ilkkachu There was a typo. Of course I can't ignore them, but if I knew them, I wouldn't have to ask. That's exactly the point of the question.

    – Elegance
    1 hour ago













  • @Elegance, ok, good, thanks. And yes, you're right, you wouldn't have to ask if you knew. It's just that even a typo like that can send the readers off in the wrong direction, looking for some really weird edge case that could explain the result. (The shell can be a bit quirky sometimes so there might have been a remote possibility of an edge case where both would return 1...)

    – ilkkachu
    1 hour ago













  • @ilkkachu Thank you for the helpful feedback.

    – Elegance
    1 hour ago

















I didn't know about the space being necessary. What I meant with "odd" is "weird if you read as pseudo code, ignoring the quirks of the language". Thanks. @ilkkachu

– Elegance
3 hours ago







I didn't know about the space being necessary. What I meant with "odd" is "weird if you read as pseudo code, ignoring the quirks of the language". Thanks. @ilkkachu

– Elegance
3 hours ago






1




1





The only way I can get [ $rc=0 ] to fail with rc=1 is to set IFS to 1 as well. That would cause both tests to error out and set $? to 2 (in bash).

– Kusalananda
3 hours ago





The only way I can get [ $rc=0 ] to fail with rc=1 is to set IFS to 1 as well. That would cause both tests to error out and set $? to 2 (in bash).

– Kusalananda
3 hours ago













@ilkkachu There was a typo. Of course I can't ignore them, but if I knew them, I wouldn't have to ask. That's exactly the point of the question.

– Elegance
1 hour ago







@ilkkachu There was a typo. Of course I can't ignore them, but if I knew them, I wouldn't have to ask. That's exactly the point of the question.

– Elegance
1 hour ago















@Elegance, ok, good, thanks. And yes, you're right, you wouldn't have to ask if you knew. It's just that even a typo like that can send the readers off in the wrong direction, looking for some really weird edge case that could explain the result. (The shell can be a bit quirky sometimes so there might have been a remote possibility of an edge case where both would return 1...)

– ilkkachu
1 hour ago







@Elegance, ok, good, thanks. And yes, you're right, you wouldn't have to ask if you knew. It's just that even a typo like that can send the readers off in the wrong direction, looking for some really weird edge case that could explain the result. (The shell can be a bit quirky sometimes so there might have been a remote possibility of an edge case where both would return 1...)

– ilkkachu
1 hour ago















@ilkkachu Thank you for the helpful feedback.

– Elegance
1 hour ago





@ilkkachu Thank you for the helpful feedback.

– Elegance
1 hour ago










2 Answers
2






active

oldest

votes


















3














-eq




True if the integers n1 and n2 are algebraically equal; otherwise, false.




test



=




True if the strings s1 and s2 are identical; otherwise, false.




test



So -eq compares integers and = compares strings (which will also work with some limited integer cases).





You do have a syntax issue though, it should be:



[ "$rc" = 0 ]


And not



[ $rc=0 ]


[ "$rc" = 0 ] should exit with 1 because rc does not equal 0



[ $rc=0 ] should actually exit with 0 because it's likely going to be treated as a string and the presence of a string within the [ test construct will evaluate to true





With the sh [ test there are a few differences:



# leading 0
$ [ 01 -eq 1 ]; echo $?
0
# adjacent whitespace
$ [ ' 1' -eq 1 ]; echo $?
0
# negative 0 vs positive 0
$ [ 0 -eq -0 ]; echo $?
0


However with the bash [[ test there are a large number of differences (Including the ones mentioned above):



# base 8
$ [[ 032 -eq 26 ]]; echo $?
0
# Arithmetic expressions
$ [[ 1*6+32/15*2-1 -eq 9 ]]; echo $?
0
# Base 64
$ [[ 64#Hello_world -eq -5506400892957379251 ]]; echo $?
0





share|improve this answer


























  • I'm just a bit confused about what is meant by numeric and string comparisons. Let's say I use = to compare numbers. When is it not going to not yield the same result as a numeric comparison?

    – Elegance
    3 hours ago













  • Any examples with strings that have nothing but digits, and don't have leading zeros?

    – Elegance
    3 hours ago






  • 1





    @Elegance The point is that with -eq, the left and right hand side are compared as integers, not as strings. The test would evaluate the strings as integers (probably by passing them through strtol() or some such C function) before carrying out the comparison.

    – Kusalananda
    3 hours ago








  • 1





    @Elegance In a bash test with [[ ... -eq ... ]] you could even have arithmetic calculations on either side, as in [[ 1+1 -eq 2 ]]. Obviously, [[ 1+1 == 2 ]] would not be true.

    – Kusalananda
    3 hours ago













  • @Jesse_b You shared the same link twice. I take it the first one is incorrect.

    – Elegance
    1 hour ago



















0














For numeric comparisons you have to use -eq whereas = is for string comparisons (as from your variable naming you already seem to know).



One of the best introductions on the test aka [ command I know is The Unix Shell's Humble If






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',
    autoActivateHeartbeat: false,
    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
    });


    }
    });






    Elegance 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%2f504979%2fexit-statuses-of-comparisons-in-test-constructs%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









    3














    -eq




    True if the integers n1 and n2 are algebraically equal; otherwise, false.




    test



    =




    True if the strings s1 and s2 are identical; otherwise, false.




    test



    So -eq compares integers and = compares strings (which will also work with some limited integer cases).





    You do have a syntax issue though, it should be:



    [ "$rc" = 0 ]


    And not



    [ $rc=0 ]


    [ "$rc" = 0 ] should exit with 1 because rc does not equal 0



    [ $rc=0 ] should actually exit with 0 because it's likely going to be treated as a string and the presence of a string within the [ test construct will evaluate to true





    With the sh [ test there are a few differences:



    # leading 0
    $ [ 01 -eq 1 ]; echo $?
    0
    # adjacent whitespace
    $ [ ' 1' -eq 1 ]; echo $?
    0
    # negative 0 vs positive 0
    $ [ 0 -eq -0 ]; echo $?
    0


    However with the bash [[ test there are a large number of differences (Including the ones mentioned above):



    # base 8
    $ [[ 032 -eq 26 ]]; echo $?
    0
    # Arithmetic expressions
    $ [[ 1*6+32/15*2-1 -eq 9 ]]; echo $?
    0
    # Base 64
    $ [[ 64#Hello_world -eq -5506400892957379251 ]]; echo $?
    0





    share|improve this answer


























    • I'm just a bit confused about what is meant by numeric and string comparisons. Let's say I use = to compare numbers. When is it not going to not yield the same result as a numeric comparison?

      – Elegance
      3 hours ago













    • Any examples with strings that have nothing but digits, and don't have leading zeros?

      – Elegance
      3 hours ago






    • 1





      @Elegance The point is that with -eq, the left and right hand side are compared as integers, not as strings. The test would evaluate the strings as integers (probably by passing them through strtol() or some such C function) before carrying out the comparison.

      – Kusalananda
      3 hours ago








    • 1





      @Elegance In a bash test with [[ ... -eq ... ]] you could even have arithmetic calculations on either side, as in [[ 1+1 -eq 2 ]]. Obviously, [[ 1+1 == 2 ]] would not be true.

      – Kusalananda
      3 hours ago













    • @Jesse_b You shared the same link twice. I take it the first one is incorrect.

      – Elegance
      1 hour ago
















    3














    -eq




    True if the integers n1 and n2 are algebraically equal; otherwise, false.




    test



    =




    True if the strings s1 and s2 are identical; otherwise, false.




    test



    So -eq compares integers and = compares strings (which will also work with some limited integer cases).





    You do have a syntax issue though, it should be:



    [ "$rc" = 0 ]


    And not



    [ $rc=0 ]


    [ "$rc" = 0 ] should exit with 1 because rc does not equal 0



    [ $rc=0 ] should actually exit with 0 because it's likely going to be treated as a string and the presence of a string within the [ test construct will evaluate to true





    With the sh [ test there are a few differences:



    # leading 0
    $ [ 01 -eq 1 ]; echo $?
    0
    # adjacent whitespace
    $ [ ' 1' -eq 1 ]; echo $?
    0
    # negative 0 vs positive 0
    $ [ 0 -eq -0 ]; echo $?
    0


    However with the bash [[ test there are a large number of differences (Including the ones mentioned above):



    # base 8
    $ [[ 032 -eq 26 ]]; echo $?
    0
    # Arithmetic expressions
    $ [[ 1*6+32/15*2-1 -eq 9 ]]; echo $?
    0
    # Base 64
    $ [[ 64#Hello_world -eq -5506400892957379251 ]]; echo $?
    0





    share|improve this answer


























    • I'm just a bit confused about what is meant by numeric and string comparisons. Let's say I use = to compare numbers. When is it not going to not yield the same result as a numeric comparison?

      – Elegance
      3 hours ago













    • Any examples with strings that have nothing but digits, and don't have leading zeros?

      – Elegance
      3 hours ago






    • 1





      @Elegance The point is that with -eq, the left and right hand side are compared as integers, not as strings. The test would evaluate the strings as integers (probably by passing them through strtol() or some such C function) before carrying out the comparison.

      – Kusalananda
      3 hours ago








    • 1





      @Elegance In a bash test with [[ ... -eq ... ]] you could even have arithmetic calculations on either side, as in [[ 1+1 -eq 2 ]]. Obviously, [[ 1+1 == 2 ]] would not be true.

      – Kusalananda
      3 hours ago













    • @Jesse_b You shared the same link twice. I take it the first one is incorrect.

      – Elegance
      1 hour ago














    3












    3








    3







    -eq




    True if the integers n1 and n2 are algebraically equal; otherwise, false.




    test



    =




    True if the strings s1 and s2 are identical; otherwise, false.




    test



    So -eq compares integers and = compares strings (which will also work with some limited integer cases).





    You do have a syntax issue though, it should be:



    [ "$rc" = 0 ]


    And not



    [ $rc=0 ]


    [ "$rc" = 0 ] should exit with 1 because rc does not equal 0



    [ $rc=0 ] should actually exit with 0 because it's likely going to be treated as a string and the presence of a string within the [ test construct will evaluate to true





    With the sh [ test there are a few differences:



    # leading 0
    $ [ 01 -eq 1 ]; echo $?
    0
    # adjacent whitespace
    $ [ ' 1' -eq 1 ]; echo $?
    0
    # negative 0 vs positive 0
    $ [ 0 -eq -0 ]; echo $?
    0


    However with the bash [[ test there are a large number of differences (Including the ones mentioned above):



    # base 8
    $ [[ 032 -eq 26 ]]; echo $?
    0
    # Arithmetic expressions
    $ [[ 1*6+32/15*2-1 -eq 9 ]]; echo $?
    0
    # Base 64
    $ [[ 64#Hello_world -eq -5506400892957379251 ]]; echo $?
    0





    share|improve this answer















    -eq




    True if the integers n1 and n2 are algebraically equal; otherwise, false.




    test



    =




    True if the strings s1 and s2 are identical; otherwise, false.




    test



    So -eq compares integers and = compares strings (which will also work with some limited integer cases).





    You do have a syntax issue though, it should be:



    [ "$rc" = 0 ]


    And not



    [ $rc=0 ]


    [ "$rc" = 0 ] should exit with 1 because rc does not equal 0



    [ $rc=0 ] should actually exit with 0 because it's likely going to be treated as a string and the presence of a string within the [ test construct will evaluate to true





    With the sh [ test there are a few differences:



    # leading 0
    $ [ 01 -eq 1 ]; echo $?
    0
    # adjacent whitespace
    $ [ ' 1' -eq 1 ]; echo $?
    0
    # negative 0 vs positive 0
    $ [ 0 -eq -0 ]; echo $?
    0


    However with the bash [[ test there are a large number of differences (Including the ones mentioned above):



    # base 8
    $ [[ 032 -eq 26 ]]; echo $?
    0
    # Arithmetic expressions
    $ [[ 1*6+32/15*2-1 -eq 9 ]]; echo $?
    0
    # Base 64
    $ [[ 64#Hello_world -eq -5506400892957379251 ]]; echo $?
    0






    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited 2 hours ago

























    answered 4 hours ago









    Jesse_bJesse_b

    13.2k23369




    13.2k23369













    • I'm just a bit confused about what is meant by numeric and string comparisons. Let's say I use = to compare numbers. When is it not going to not yield the same result as a numeric comparison?

      – Elegance
      3 hours ago













    • Any examples with strings that have nothing but digits, and don't have leading zeros?

      – Elegance
      3 hours ago






    • 1





      @Elegance The point is that with -eq, the left and right hand side are compared as integers, not as strings. The test would evaluate the strings as integers (probably by passing them through strtol() or some such C function) before carrying out the comparison.

      – Kusalananda
      3 hours ago








    • 1





      @Elegance In a bash test with [[ ... -eq ... ]] you could even have arithmetic calculations on either side, as in [[ 1+1 -eq 2 ]]. Obviously, [[ 1+1 == 2 ]] would not be true.

      – Kusalananda
      3 hours ago













    • @Jesse_b You shared the same link twice. I take it the first one is incorrect.

      – Elegance
      1 hour ago



















    • I'm just a bit confused about what is meant by numeric and string comparisons. Let's say I use = to compare numbers. When is it not going to not yield the same result as a numeric comparison?

      – Elegance
      3 hours ago













    • Any examples with strings that have nothing but digits, and don't have leading zeros?

      – Elegance
      3 hours ago






    • 1





      @Elegance The point is that with -eq, the left and right hand side are compared as integers, not as strings. The test would evaluate the strings as integers (probably by passing them through strtol() or some such C function) before carrying out the comparison.

      – Kusalananda
      3 hours ago








    • 1





      @Elegance In a bash test with [[ ... -eq ... ]] you could even have arithmetic calculations on either side, as in [[ 1+1 -eq 2 ]]. Obviously, [[ 1+1 == 2 ]] would not be true.

      – Kusalananda
      3 hours ago













    • @Jesse_b You shared the same link twice. I take it the first one is incorrect.

      – Elegance
      1 hour ago

















    I'm just a bit confused about what is meant by numeric and string comparisons. Let's say I use = to compare numbers. When is it not going to not yield the same result as a numeric comparison?

    – Elegance
    3 hours ago







    I'm just a bit confused about what is meant by numeric and string comparisons. Let's say I use = to compare numbers. When is it not going to not yield the same result as a numeric comparison?

    – Elegance
    3 hours ago















    Any examples with strings that have nothing but digits, and don't have leading zeros?

    – Elegance
    3 hours ago





    Any examples with strings that have nothing but digits, and don't have leading zeros?

    – Elegance
    3 hours ago




    1




    1





    @Elegance The point is that with -eq, the left and right hand side are compared as integers, not as strings. The test would evaluate the strings as integers (probably by passing them through strtol() or some such C function) before carrying out the comparison.

    – Kusalananda
    3 hours ago







    @Elegance The point is that with -eq, the left and right hand side are compared as integers, not as strings. The test would evaluate the strings as integers (probably by passing them through strtol() or some such C function) before carrying out the comparison.

    – Kusalananda
    3 hours ago






    1




    1





    @Elegance In a bash test with [[ ... -eq ... ]] you could even have arithmetic calculations on either side, as in [[ 1+1 -eq 2 ]]. Obviously, [[ 1+1 == 2 ]] would not be true.

    – Kusalananda
    3 hours ago







    @Elegance In a bash test with [[ ... -eq ... ]] you could even have arithmetic calculations on either side, as in [[ 1+1 -eq 2 ]]. Obviously, [[ 1+1 == 2 ]] would not be true.

    – Kusalananda
    3 hours ago















    @Jesse_b You shared the same link twice. I take it the first one is incorrect.

    – Elegance
    1 hour ago





    @Jesse_b You shared the same link twice. I take it the first one is incorrect.

    – Elegance
    1 hour ago













    0














    For numeric comparisons you have to use -eq whereas = is for string comparisons (as from your variable naming you already seem to know).



    One of the best introductions on the test aka [ command I know is The Unix Shell's Humble If






    share|improve this answer




























      0














      For numeric comparisons you have to use -eq whereas = is for string comparisons (as from your variable naming you already seem to know).



      One of the best introductions on the test aka [ command I know is The Unix Shell's Humble If






      share|improve this answer


























        0












        0








        0







        For numeric comparisons you have to use -eq whereas = is for string comparisons (as from your variable naming you already seem to know).



        One of the best introductions on the test aka [ command I know is The Unix Shell's Humble If






        share|improve this answer













        For numeric comparisons you have to use -eq whereas = is for string comparisons (as from your variable naming you already seem to know).



        One of the best introductions on the test aka [ command I know is The Unix Shell's Humble If







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered 4 hours ago









        freiheitsnetzfreiheitsnetz

        112




        112






















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










            draft saved

            draft discarded


















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













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












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
















            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.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f504979%2fexit-statuses-of-comparisons-in-test-constructs%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

            IEEEtran - How to include ORCID in TeX/PDF with PdfLatexIs there a standard way to include ORCID in TeX /...

            Cicindela nigrior Przypisy | Menu nawigacyjneCicindela varians unicolorManual for the Identification of the...

            Glossaries-extra: Adding glossaries package to “Clas­sicTh­e­sis” template by Dr. André Miede v. 4.6 ...