fix variable scope bug
authorIan Kelling <ian@iankelling.org>
Tue, 29 Jul 2014 02:42:58 +0000 (19:42 -0700)
committerIan Kelling <ian@iankelling.org>
Tue, 29 Jul 2014 02:42:58 +0000 (19:42 -0700)
appendu
appendu-function
test/test

diff --git a/appendu b/appendu
index 792ffce882618a8c2d96d702425f7175301f3644..1e3d583c550e9f084da2cfe8df9be78fae1ed332 100755 (executable)
--- a/appendu
+++ b/appendu
@@ -47,6 +47,17 @@ LINE_SETs are treated the same.
             return 1
         fi
     fi
+
+    local strings line
+    if (( $# == 0 )); then
+        unset IFS
+        while read -r line; do
+            strings+=( "$line" )
+        done
+    else
+        strings=( "$@" )
+    fi
+
     if ! $new_file; then
         if [[ ! -r $file ]]; then
             echo "appendu error: cannot read or write $file"
@@ -56,19 +67,6 @@ LINE_SETs are treated the same.
             echo "appendu error: cannot read or write $file"
             return 1
         fi            
-    fi
-
-    local strings
-    if (( $# == 0 )); then
-        unset IFS
-        while read -r x; do
-            strings+=( "$x" )
-        done
-    else
-        strings=( "$@" )
-    fi
-
-    if $new_file; then
         # fix files with no newline at the end.
         # the following command won't work right on them otherwise.
         # e = run script, $a\ means append following text, but there is none,
index a0fdc5d6e0c1b5b73e25a1dc3d87d4766b655626..8b03b0fb5f77af89f95eb5bdb83a33d8f4c52398 100644 (file)
@@ -47,6 +47,17 @@ LINE_SETs are treated the same.
             return 1
         fi
     fi
+
+    local strings line
+    if (( $# == 0 )); then
+        unset IFS
+        while read -r line; do
+            strings+=( "$line" )
+        done
+    else
+        strings=( "$@" )
+    fi
+
     if ! $new_file; then
         if [[ ! -r $file ]]; then
             echo "appendu error: cannot read or write $file"
@@ -56,19 +67,6 @@ LINE_SETs are treated the same.
             echo "appendu error: cannot read or write $file"
             return 1
         fi            
-    fi
-
-    local strings
-    if (( $# == 0 )); then
-        unset IFS
-        while read -r x; do
-            strings+=( "$x" )
-        done
-    else
-        strings=( "$@" )
-    fi
-
-    if $new_file; then
         # fix files with no newline at the end.
         # the following command won't work right on them otherwise.
         # e = run script, $a\ means append following text, but there is none,
index c2f2109277f045c2c1d9684c0bcbd70893e9282c..ce169c4e2254bb1da42eeade1e5600305bc99725 100755 (executable)
--- a/test/test
+++ b/test/test
@@ -1,32 +1,32 @@
 #!/bin/bash -l
 x=$(mktemp)
 appendu $x<<'EOF'
-abc
-
-*!@#$^&*))0_)()?><M;sdf234
-
+aa
+bb
 EOF
 
 y=$(mktemp)
 tee -a $y<<'EOF'
-abc
-
-*!@#$^&*))0_)()?><M;sdf234
-
+aa
+bb
 EOF
 
 
-output=$(appendu $x<<'EOF'
-foo
-abc
-*(@#$%)
+output="$(
+appendu $x<<'EOF'
+cc
+aa
+caa
+bb
 
-*!@#$^&*))0_)()?><M;sdf234
+dd
 EOF
-)
+)"
+
+good_output='cc
+caa
 
-good_output='foo
-*(@#$%)'
+dd'
 
 [[ $output == "$good_output" ]] || { echo check1 failed; echo "$output != $good_output"; }
 
@@ -35,11 +35,11 @@ echo "$good_output" >> $y
 
 diff $x $y || echo check2 failed diffing $x and $y
 
-output=$(appendu $x "abc
-bd" "abc")
+output=$(appendu $x "aa
+ee" "bb")
 
-good_output="abc
-bd"
+good_output="aa
+ee"
 
 [[ $output == $good_output ]] || { echo check3 failed; echo "$output != $good_output"; }