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))