Bash Expressions: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 30: Line 30:
{{External|http://mywiki.wooledge.org/BashFAQ/031}}
{{External|http://mywiki.wooledge.org/BashFAQ/031}}


[ and "test" are equivalent. [...] is part of the shell built-in command [[bash test|test]]. [[ is a keyword rather than a program. [ and [[ have much in common and share many expression operators like "-f", "-s", "-n", and "-z".
[ and "test" are equivalent: [...] is part of the shell built-in command [[bash test|test]]. [[ is a keyword rather than a program. [ and [[ have much in common and share many expression operators like "-f", "-s", "-n", and "-z".


Notable differences:
Notable differences:
* [[ allows =~ and regular expression matching.
* [[ allows =~ and regular expression matching.
* Variables do not have to be quoted inside [[...]] because [[ handles empty strings or strings with spaces more intuitively.
* Variables do not have to be quoted inside [[...]] because [[ handles empty strings or strings with spaces more intuitively.

Revision as of 20:30, 25 February 2018

Internal

Conditional Expressions

Difference between -a and &&

If want to combine the results of multiple command executions in an if condition, use &&, not -a.

Example:

if grep "something" /file1.txt && grep "something" /file2.txt' then
    # "something" exists in both files ...
fi

-a should be used in test expressions:

if [ -f /file.txt -a -x /file.txt ]; then 
  ...
fi

[[...]]

http://mywiki.wooledge.org/BashFAQ/031

[ and "test" are equivalent: [...] is part of the shell built-in command test. [[ is a keyword rather than a program. [ and [[ have much in common and share many expression operators like "-f", "-s", "-n", and "-z".

Notable differences:

  • [[ allows =~ and regular expression matching.
  • Variables do not have to be quoted inside [[...]] because [[ handles empty strings or strings with spaces more intuitively.