While this does not really answer you question, have you considered using read
instead of cat
?
read -d '' usage <<- EOF
Usage:${BASENAME} [-h] [-n] [-q]
-h, --help This usage message
-n, --dry-run
-q, --quiet
-d, --Destination
EOF
echo "$usage"
It reads the content of the here string into the variable usage, which you can then output using echo or printf.
The advantage is that read
is a bash builtin and thus faster than cat
(which is an external command).
You can also simply embed newlines in a string:
usage="Usage:${BASENAME} [-h] [-n] [-q]
-h, --help This usage message
...
"