| From: William Park via talk <talk@gtalug.org> | 1. You don't need quotes in variable assignments like | var="$(...)" | var="$var1"
True. Even if var1 has whitespace. But the quotes are harmless. The rule I aspire to following: Quote all shell variable references EXCEPT when they must not be quoted (rare). It's a lot easier than knowing the very odd rules applying to assignment and other special contexts. Why is assignment odd? Because, syntactically, it is a kind of word (an ASSIGNMENT_WORD according to POSIX). | 2. The following tests are the same. They both tests if var is empty. | [ "$var"x = x ] | [ -z "$var" ] I like -z Superstitiously, I would write [ "x$var" = x ] instead of [ "$var"x = x ] I would otherwise worry that if $var started with, say, -, funny things might happen. | 3. Testing if command succeeded or failed can be done in-line. | if command1 | command2 | command2; then | ... | else | ... | fi When I learned sh (long before POSIX) I think that the Bourne Shell set the exit status of a pipeline to the exit status of the first command. So I'm (needlessly) nervous about what the exit status of a pipeline is. BASH has an option to have a pipeline fail if any component fails. Seems useful (but not portable): -o pipefail Speaking of useful bash options, I always turn on these two options in my BASH scripts -e stop dead when a command returns an error in an untested context -u consider a reference to an undefined variable to be an error These catch a lot of errors that might otherwise go unnoticed. | 4. Case statement is usually better than if statement. eg. | if [[ "$var" == glob ]]; then | ... | fi | vs | case $var in | glob) ... ;; | esac | Note the missing quotes in case, too. You don't need it. I think that [[ ]] is a BASHism. I presume that it has advantages over [ ] but I don't know them. In the old days, test (AKA [ ]) wasn't built-in and so case was faster. This isn't true of modern shells. --- Post to this mailing list talk@gtalug.org Unsubscribe from this mailing list https://gtalug.org/mailman/listinfo/talk