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 ### !?

Reply via email to