Also,
${CC:=gcc}
is only more readable than: [ -z "$CC" ] || CC=gcc
if you know what that syntax means. There are a ton of syntax in bash/zsh to modify varables inside of the ${} construct. I usually have to look them up every time that I see them, even when I was the one the wrote the original code. I would say that more people know the 'test' syntax than the ${:=} syntax. > 3. You can assign one variable to another without quoting
This is somewhat annoying, because something like this: command="ls -l"
$command /path/to/dir
doesn't work. It tries to run a command called "ls -l" which probably doesn't exist. Passing that to exec will work, though. A more common example of this issue would be trying to build a command-line in the shell script before executing it, you might have base level of options: base_options="-l -d --debug=1"
command $base_options $opt1 $opt2
But $base_options gets passed as a single parameter to command.