bashvar is a small Ruby library that parses the output produced by running the following Bash snippet:
compgen -v | while read -r var; do declare -p "$var" 2>/dev/null; doneIt provides a robust, dependency-free way to marshal Bash variables into Ruby data structures.
This library was initially scaffolded with assistance from Google Gemini CLI. All code has been reviewed and modified by human contributors. See LICENSE (MIT) for terms.
Add this line to your application's Gemfile:
gem 'bashvar'And then execute:
$ bundle installOr install it yourself as:
$ gem install bashvarFirst, capture your Bash variables into a file (e.g., /tmp/bash_vars.txt):
echo "$(compgen -v | while read -r v; do declare -p "$v" 2>/dev/null; done)" > /tmp/bash_vars.txtThen, parse them in Ruby:
require "bashvar"
input = File.read("/tmp/bash_vars.txt")
vars = BashVar.parse(input)
puts vars["HOME"]
puts vars["PATH"]
# Example for array/hash variables
require 'pp' # For pretty printing
pp vars["LIST"] if vars.key?("LIST")
pp vars["MAP"] if vars.key?("MAP")| Bash Flags | Example declare -p line |
Ruby Value Type | Notes |
|---|---|---|---|
-- (none), -x, -r, combos w/out a, A, i |
declare -- HOME="/home/u" |
String |
Attribute flags ignored for value type. Export/readonly not preserved. |
-i |
declare -i COUNT="42" |
Integer (if parseable) else String |
Numeric conversion best‑effort via Integer(); fallback to raw decoded string. |
-a |
declare -a LIST='([0]="a" [1]="b")' |
Array<String> |
Indices respected; assigning to result[index] = value (Ruby auto-expands & fills nil). |
-A |
declare -A MAP='([k]="v" [x]="y")' |
Hash<String,String> |
Keys preserved as strings exactly as given inside brackets. |
Double‑quoted values and ANSI-C quoted ($'...') values emitted by declare -p may contain backslash escapes (e.g., \n, \t, \", \\). These are decoded to their actual characters in the returned Ruby value.
- Does not preserve attribute metadata (export, readonly, nameref, etc.). Only value typing.
- Does not attempt to resolve
nameref(-n) targets. - Does not evaluate arithmetic expressions beyond what Bash already evaluated in the
declare -poutput. - Does not parse function definitions.
Bug reports and pull requests are welcome on GitHub at https://github.com/fd00/bashvar.
The gem is available as open source under the terms of the MIT License.