The argument for : "${foo:=x}" is usually that you don't have to repeat foo, leading to less opportunity for errors and generally DRY.
post
I'd you're concerned about this, it's up to you to change your bash script style.
Use "set -euo pipefail" and don't use ": =". You can't stop others from doing so though. It's their code, their choice.
I never use ": =" in bash though.
But that has the same effect like DB_HOST="${DB_HOST:-localhost} (use the string if not set), which is more readable.
I disagree that the duplicate reference would be more readable. Instead, the reader needs (if they care about the meaning of the code) to double-check whether the two duplicate names are exactly the same, or whether they are subtly different. At which point the reader needs to wonder why the code isn't written using the form without the repeated name. So, that's not a readability improvement.
Related to that: Code with duplicate references in a single expression or statement leaves open the likelihood that one or more of them will contain a typo or an easily-overlooked difference, leading to bugs. DRY is a good principle to avoid that.
I think it makes it easier to read, because the other variable assignments are also this way. DRY is from a time where one-letter variables were common.
all 7 comments