diff --git a/expand.cpp b/expand.cpp index c370725a3..4a3eaf015 100644 --- a/expand.cpp +++ b/expand.cpp @@ -735,7 +735,6 @@ static int parse_slice( const wchar_t *in, wchar_t **end_ptr, std::vector // debug( 0, L"parse_slice on '%ls'", in ); - while( 1 ) { long tmp; @@ -761,6 +760,8 @@ static int parse_slice( const wchar_t *in, wchar_t **end_ptr, std::vector pos = end-in; if ( in[pos]==L'.' && in[pos+1]==L'.' ){ pos+=2; + while( in[pos]==INTERNAL_SEPARATOR ) + pos++; long tmp1 = wcstol( &in[pos], &end, 10 ); if( ( errno ) || ( end == &in[pos] ) ) { diff --git a/tests/test8.in b/tests/test8.in index e03d9d05b..3a76e8bf8 100644 --- a/tests/test8.in +++ b/tests/test8.in @@ -1,21 +1,21 @@ # Test index ranges -# Test variable expand -set test (seq 10) -echo $test[1..10] # normal range -echo $test[10..1] # inverted range +echo Test variable expand +set n 10 +set test (seq $n) +echo $test[1..$n] # normal range +echo $test[$n..1] # inverted range echo $test[2..5 8..6] # several ranges echo $test[-1..-2] # range with negative limits echo $test[-1..1] # range with mixed limits -# Test variable set +echo Test variable set set test1 $test -set test1[-1..1] $test # reverse variable -echo $echo $test1 -set test1[2..4 -2..-4] $test1[4..2 -4..-2] -echo $test1 +set test1[-1..1] $test; echo $test1 +set test1[1..$n] $test; echo $test1 +set test1[$n..1] $test; echo $test1 +set test1[2..4 -2..-4] $test1[4..2 -4..-2]; echo $test1 -# Test command substitution +echo Test command substitution echo (seq 5)[-1..1] -echo (seq 10)[3..5 -2..2] - +echo (seq $n)[3..5 -2..2] diff --git a/tests/test8.out b/tests/test8.out index e118e572b..82bf40942 100644 --- a/tests/test8.out +++ b/tests/test8.out @@ -1,9 +1,14 @@ +Test variable expand 1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1 2 3 4 5 8 7 6 10 9 10 9 8 7 6 5 4 3 2 1 +Test variable set +10 9 8 7 6 5 4 3 2 1 +1 2 3 4 5 6 7 8 9 10 10 9 8 7 6 5 4 3 2 1 10 7 8 9 6 5 2 3 4 1 +Test command substitution 5 4 3 2 1 3 4 5 9 8 7 6 5 4 3 2