Bash Expressions: Difference between revisions
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 [[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
[[...]]
[ 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.