On Tue, Oct 20, 2009 at 10:17 PM, Dan McGee <[email protected]> wrote: > On Tue, Oct 20, 2009 at 9:45 PM, Allan McRae <[email protected]> wrote: >> Hi all, >> >> This problem has been doing my head in... First a minimal example that >> reflects how makepkg does things: >> >> --one.sh-- >> #!/bin/bash >> >> echo "pass 1:" >> for arg in "$@"; do >> echo $arg >> done >> echo >> >> ARGLIST="$@" >> >> ./two.sh $ARGLIST >> --end one.sh-- >> >> --two.sh-- >> #!/bin/bash >> >> echo "pass 2:" >> for arg in "$@"; do >> echo $arg >> done >> --end two.sh-- >> >> then run: >> ./one.sh -f -h "foo bar" >> pass 1: >> -f >> -h >> foo bar >> >> pass 2: >> -f >> -h >> foo >> bar >> >> >> Note how in pass two, foo and bar are no longer in the one line. Of >> course, passing ./two.sh "$@" works, but the argument parsing in makepkg >> clears that, hence the need to save it to ARGLIST. >> >> Any ideas? > > Of course! I think I got it. > > dmc...@kilkenny /tmp > $ ./one.sh -f -h "foo bar" > pass 1: > -f > -h > foo bar > > pass 2: > -f > -h > foo > bar > > dmc...@kilkenny /tmp > $ ./one-new.sh -f -h "foo bar" > pass 1: > -f > -h > foo bar > > pass 2: > -f > -h > foo bar > > $ cat one-new.sh > #!/bin/bash > echo "pass 1:" > for arg in "$@"; do > echo $arg > done > echo > > ARGLIST=("$@") > > ./two.sh "${argli...@]}" > > Do I win a prize or anything? :P
It's worth noting that the following works two: ./two.sh "$@" The reason being that "$@" is special in bash. It actually expands to the command line quoted as you passed it, with "foo bar" being one argument. The issue is with the assignment to a single bash variable
