forked from mirrors/org-mode
* lisp/ob-shell.el: added support to serialize vars as arrays or associative arrays as appropriate if it is using bash. * testing/examples/ob-shell-test.org: a file containing a few code blocks both illustrating the use of arrays as well as serving as test for the new export functionality. * testing/lisp/test-ob-shell.el: added a few unit tests that verify that this new logic only triggers for bash and no other shell at this time. When variables are defined in a 'sh' code block, they are exported as strings. when the variable itself is an array or a table, then we simply get a shell variable that contains the list of all values in a non-structured form. When calling the code block with bash, however, it will now export the list as an array, the table as an associative array. A scalar is exported the same way as before. Signed-off-by: Pascal Fleury <fleury@google.com>
89 lines
2.1 KiB
Org Mode
89 lines
2.1 KiB
Org Mode
#+Title: a collection of examples for ob-shell tests
|
|
#+OPTIONS: ^:nil
|
|
|
|
* Sample data structures
|
|
#+NAME: sample_array
|
|
| one |
|
|
| two |
|
|
| three |
|
|
|
|
#+NAME: sample_mapping_table
|
|
| first | one |
|
|
| second | two |
|
|
| third | three |
|
|
|
|
#+NAME: sample_big_table
|
|
| bread | 2 | kg |
|
|
| spaghetti | 20 | cm |
|
|
| milk | 50 | dl |
|
|
|
|
* Array tests
|
|
:PROPERTIES:
|
|
:ID: 0ba56632-8dc1-405c-a083-c204bae477cf
|
|
:END:
|
|
** Generic shell: no arrays
|
|
#+begin_src sh :exports results :var array=sample_array
|
|
echo ${array}
|
|
#+end_src
|
|
|
|
#+RESULTS:
|
|
: one two three
|
|
|
|
** Bash shell: support for arrays
|
|
Bash will see a simple indexed array. In this test, we check that the
|
|
returned value is indeed only the first item of the array, as opposed to
|
|
the generic serialiation that will return all elements of the array as
|
|
a single string.
|
|
#+begin_src bash :exports results :var array=sample_array
|
|
echo ${array}
|
|
#+end_src
|
|
|
|
#+RESULTS:
|
|
: one
|
|
|
|
* Associative array tests (simple map)
|
|
:PROPERTIES:
|
|
:ID: bec1a5b0-4619-4450-a8c0-2a746b44bf8d
|
|
:END:
|
|
** Generic shell: no special handing
|
|
The shell will see all values as a single string.
|
|
#+begin_src sh :exports results :var table=sample_mapping_table
|
|
echo ${table}
|
|
#+end_src
|
|
|
|
#+RESULTS:
|
|
: first one second two third three
|
|
|
|
** Bash shell: support for associative arrays
|
|
Bash will see a table that contains the first column as the 'index'
|
|
of the associative array, and the second column as the value.
|
|
#+begin_src bash :exports results :var table=sample_mapping_table
|
|
echo ${table[second]}
|
|
#+end_src
|
|
|
|
#+RESULTS:
|
|
: two
|
|
|
|
* Associative array tests (more than 2 columns)
|
|
:PROPERTIES:
|
|
:ID: 82320a48-3409-49d7-85c9-5de1c6d3ff87
|
|
:END:
|
|
** Generic shell: no special handing
|
|
#+begin_src sh :exports results :var table=sample_big_table
|
|
echo ${table}
|
|
#+end_src
|
|
|
|
#+RESULTS:
|
|
: bread 2 kg spaghetti 20 cm milk 50 dl
|
|
|
|
** Bash shell: support for associative arrays with lists
|
|
Bash will see an associative array that contains each row as a single
|
|
string. Bash cannot handle lists in associative arrays.
|
|
#+begin_src bash :exports results :var table=sample_big_table
|
|
echo ${table[spaghetti]}
|
|
#+end_src
|
|
|
|
#+RESULTS:
|
|
: 20 cm
|
|
|