aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar maxfl <gmaxfl@gmail.com>2012-07-08 09:39:39 +0800
committerGravatar maxfl <gmaxfl@gmail.com>2012-07-08 09:39:39 +0800
commite1b8c425da571b7f002103805520a1d496ebb087 (patch)
treef4a9790adc9ba61f3485e0013b6f958f80a14695
parent5f05756e657d85026026d95d4ada0b6677861900 (diff)
Fix case when second limit is a variable:
echo $PATH[1..$n]
-rw-r--r--expand.cpp3
-rw-r--r--tests/test8.in24
-rw-r--r--tests/test8.out5
3 files changed, 19 insertions, 13 deletions
diff --git a/expand.cpp b/expand.cpp
index c370725a..4a3eaf01 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<long>
// 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<long>
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 e03d9d05..3a76e8bf 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 e118e572..82bf4094 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