diff --git a/share/spack/setup-env.sh b/share/spack/setup-env.sh
index b90846d28fcd6dfbe2ee4811376b7669989203b8..8ee42bb10f8f9bc222ab0cd04804c434cda5384f 100755
--- a/share/spack/setup-env.sh
+++ b/share/spack/setup-env.sh
@@ -56,6 +56,12 @@
 # spack dotfiles.
 ########################################################################
 function spack {
+    # save raw arguments into an array before butchering them
+    args=()
+    for a in "$@"; do
+        # yup, this is awful, blame bash2 compat
+        args=("${args[@]}" "$a")
+    done
     # accumulate initial flags for main spack command
     _sp_flags=""
     while [[ "$1" =~ ^- ]]; do
@@ -116,7 +122,7 @@ function spack {
             esac
             ;;
         *)
-            command spack $_sp_flags $_sp_subcommand $_sp_spec
+            command spack "${args[@]}"
             ;;
     esac
 }