Introduction
TickTick enables you to put JSON in bash scripts. Yes, just encapsulate them with two back-ticks.
Note: This is just a fun hack. You may want to consider using mature languages like Ruby or Perl to solve actual real life problems. Oh who am I kidding, I use whitespace and brainfuck every day.
Usage
Proper usage (if there is such a thing), is to place the following line right after the "shbang" at the top of your script. For instance:
#!/bin/bash
#
# Nuclear_meltdown_preventer.sh
#
# This is really important stuff. Don't edit it!
#
. ticktick.sh
..
See how that's near the tippity-top? That's where it's supposed to go. If you put it lower, all bets are off. :-(
API
Arrays
A few array manipulation runtime directives are supported:
[]
(as new Array)``arr = ["foo"]``
[]
(to index)echo ``arr[0]``
length
arr_len=``arr.length()``; echo ${arr_len}
push
``arr.push(${arr_len})``
pop
echo ``arr.pop()``
shift
echo ``arr.shift()``
delete
echo ``key.value.delete()``
items
for x in ``arr.items()``; do echo "${x}"; done
Notes:
- These feature do not preclude having variables by those names. You can have
key.delete = 1
and thenkey.delete.delete()
- Since TickTick is a Bash-emitting transpiler, things that don't work in bash (such as modifying in-shell variables in double quotes) don't work in TickTick.
Objects
{}
(as new Object)``obj = { "foo": "bar", "baz": "qux" }``
[]
(to index)echo ``obj["foo"]``
.
(to index)echo ``obj.baz``
Miscellaneous
tickParse - parse things inline
- Inline parsing: You can parse a file in with the
tickParse
routine (see the example).
tickVars - see the currently defined variables
- Show all variables: You can see the current values defined in the TickTick world with the
tickVars
routine. - If you don't like the output, there are some options to customize it. Try
tickVars -h
for more information.
tickReset - clear the currently defined variables
- Clear all variables: You can erace any JSON you have created/imported with the
tickReset
routine.
__tick_var_debug - See the interim bash code
- Dry run (display compiled code): TickTick is a mini-compiler that emits bash. If you declare
export __tick_var_debug=1
at the top of your code (before you source ticktick.sh), then the code will not run but instead print what it would have run.
Bash variables ($) in JSON
Along with assignment operations1, and Javascript like indexing into objects and arrays.
Additionally, bash variables (eg., "$name") are preserved in the TickTick blocks. For instance, once could do
`` Var.Data = [] `` `` Var.Data.push($key) `` bashvar=`` Var.Data.pop() ``
1Although Javascript supports $ prefixed variables, this does not.
Examples
Inline Parsing
#!/bin/bash
. ticktick.sh
bob=Bob
``
people = {
"HR" : [
"Alice",
$bob,
"Carol"
],
"Sales": {
"Gale": { "profits" : 1000 },
"Harry": { "profits" : 500 }
}
}
``
function printEmployees() {
echo
echo " The ``people.Engineering.length()`` Employees listed are:"
for employee in ``people.Engineering.items()``; do
printf " - %s\n" "${!employee}"
done
echo
}
echo Base Assignment
`` people.Engineering = [ "Darren", "Edith", "Frank" ] ``
printEmployees
newPerson=Isaac
echo Pushed a new element by variable, $newPerson onto the array
`` people.Engineering.push($newPerson) ``
printEmployees
echo Shifted the first element off: `` people.Engineering.shift() ``
printEmployees
echo Popped the last value off: `` people.Engineering.pop() ``
printEmployees
echo Indexing an array, doing variable assignments
person0=``people.HR[0]``
echo $person0 ``people.HR[1]``
Using a File or cURL
#!/bin/bash
. ../ticktick.sh
# File
DATA=`cat data.json`
# cURL
#DATA=`curl http://foobar3000.com/echo/request.json`
tickParse "$DATA"
echo ``pathname``
echo ``headers["user-agent"]``
Mailing List
Join it over here.
LICENSE
This software is available under the following licenses:
- MIT
- Apache 2
Parts of this work are derived from JSON.sh, which is also available under the aforementioned licenses.