ash: [EXPAND] Split unquoted $@/$* correctly when IFS is set but empty

Upstream commit:

    Date: Wed, 8 Oct 2014 15:24:23 +0800
    [EXPAND] Split unquoted $@/$* correctly when IFS is set but empty

    Currently we do not field-split $@/$* when it isn't quoted and IFS
    is set but empty.  This is obviously wrong.  This patch fixes this.

    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko
2016-10-01 20:35:10 +02:00
parent a2633aa819
commit c4d4380a07
5 changed files with 101 additions and 5 deletions

View File

@@ -0,0 +1,25 @@
Testing: !IFS $*
.abc.
.d.
.e.
Testing: !IFS $@
.abc.
.d.
.e.
Testing: !IFS "$*"
.abc d e.
Testing: !IFS "$@"
.abc.
.d e.
Testing: IFS="" $*
.abc.
.d e.
Testing: IFS="" $@
.abc.
.d e.
Testing: IFS="" "$*"
.abcd e.
Testing: IFS="" "$@"
.abc.
.d e.
Finished

View File

@@ -0,0 +1,21 @@
set -- abc "d e"
echo 'Testing: !IFS $*'
unset IFS; for a in $*; do echo ".$a."; done
echo 'Testing: !IFS $@'
unset IFS; for a in $@; do echo ".$a."; done
echo 'Testing: !IFS "$*"'
unset IFS; for a in "$*"; do echo ".$a."; done
echo 'Testing: !IFS "$@"'
unset IFS; for a in "$@"; do echo ".$a."; done
echo 'Testing: IFS="" $*'
IFS=""; for a in $*; do echo ".$a."; done
echo 'Testing: IFS="" $@'
IFS=""; for a in $@; do echo ".$a."; done
echo 'Testing: IFS="" "$*"'
IFS=""; for a in "$*"; do echo ".$a."; done
echo 'Testing: IFS="" "$@"'
IFS=""; for a in "$@"; do echo ".$a."; done
echo Finished