Hello,

I recently updated my org-mode from version 7 (I think) to the latest. The behaviour of using a table as a variable in a shell code source block has changed. I use to use it like this:

#+BEGIN_SRC sh :results output :var table=synteny-names :separator ,
  IFS=','
  while read col1 col2; do
      # do stuff
  done <<EOF
  $table
  EOF
#+END_SRC

This just stopped working with the new version and I could not figure out why for a long time. But I looked in the new ob-shell.el code and figured out that when the shell is bash it now makes an associative array if the variable is a table. I couldn't seem to find this documented anywhere.

This new behaviour seems like it would be useful in a lot of cases, but in my case, the tables are not key-value pairs, they are merely things I want to iterate over. I wonder if simply checking to see if :separator is set and using the old behaviour if so would be better? This would seem to be a fine fix which maintains backwards compatibility unless there is a reason to set :separator but still expect the new behaviour.

Thanks,

George.
diff --git a/site-lisp/org/ob-shell.el b/site-lisp/org/ob-shell.el
index 9c22af8..6f5f76e 100644
--- a/site-lisp/org/ob-shell.el
+++ b/site-lisp/org/ob-shell.el
@@ -140,7 +140,7 @@ This function is called by `org-babel-execute-src-block'."
 
 (defun org-babel--variable-assignments:bash (varname values &optional sep hline)
   "Represents the parameters as useful Bash shell variables."
-  (if (listp values)
+  (if (and (listp values) (null sep))
       (if (and (listp (car values)) (= 1 (length (car values))))
 	  (org-babel--variable-assignments:bash_array varname values sep hline)
 	(org-babel--variable-assignments:bash_assoc varname values sep hline))

Reply via email to