I noticed an issue using the parameter built-in variable $@ breaking
out of contained strings when utilized in functions.
For example, consider the following bash script:
m.bsh #!/bin/bash
echo "$#"
while getopts d: OPTION "$@"; do
case "$OPTION" in
d)
echo "the optarg is ${OPTARG##*=}, optind is ${OPTIND}"
[[ -z "${OPTARG}" ]] && echo "Let's set the null byte as the delim."
;;
esac
done
exit 0$
alias t1='_() { var=$@; /tmp/m.bsh -d "clarify ${var}"; }; _'$
t1 hi there 2
the optarg is clarify hi there, optind is 3
### Correctly considers the text as a single string argument
containing a space.
$
alias t2='_() { /tmp/m.bsh -d "clarify $@"; }; _'$
t2 hi there 3
the optarg is clarify hi, optind is 3
### Incorrectly breaks the argument array variable out as separate
single string arguments.
I noticed another interesting occurrence as well, I'm not sure if they are related, to variable names:
function update() {
local -i VAR=45
VAR+=-1
VAR+=$1
echo $VAR
}
$ VAR2=2
$ update VAR2
47
$ VAR=3
$ update VAR
88 ### !?