hashstash(3) libbash library that implements hash data structure

SYNOPSIS

hashSet
Aq Value Aq Key Aq HashName [SubHashName [...] ]
Ft $retval hashGet
Aq Key Aq HashName [SubHashName [...] ]
Ft $retval hashKeys
Aq HashName [SubHashName [...] ]
hashRemove
Aq Key Aq HashName [SubHashName [...] ]
hashDelete
Aq HashName [SubHashName [...] ]

DESCRIPTION

General

is a collection of functions that implement basic hash data-structure in bash scripting language.

The function list:

hashSet
Adds a value to the hash
hashGet
Returns a value from the hash
hashKeys
Returns a list of keys of the hash
hashRemove
Removes a key from the hash
hashDelete
Deletes a hash

Detailed interface description follows.

FUNCTIONS DESCRIPTIONS

hashSet Ao Fa Value Ac Ao Fa Key Ac Ao Fa Hashname Ac [SubHashName [...] ]

Adds a value to the hash.

Parameters:

Aq Fa Value The value to set in
Fa HashName Ns Bo Fa Key Bc .
Aq Fa Key The key for the value
Fa Value .
Ao Fa HashName Ac [SubHashName [...] ]
A string that contains the name of the hash. If the hash is a sub hash of another hash, the "father hash" name MUST BE WRITTEN FIRST, followed by the sub-hash name.

Fa Value will be the value of the key Fa Key in the hash Fa HashName . For example if you have (or want to define) hash C which is subhash of hash B which is subhash of hash A and C has a key named ckey1 with value cval1 then you should use:

Ft $retval hashGet Ao Fa Key Ac Ao Fa HashName Ac [SubHashName [...] ]

Returns the value of Fa Key in Fa HashName to the Ft $retval variable.

Parameters:

Aq Fa Key The key that hold the value we wish to get.
Ao Fa HashName Ac [SubHashName [...] ]
A string that contains the name of the hash. If the hash is a sub hash of another hash, the Qq father hash name MUST BE WRITTEN FIRST, followed by the sub-hash name.

Return Value: The value of the key Fa Key in the hash Fa HashName . The value is returned in the variable Ft $retval .

Ft $retval hashKeys Ao Fa HashName Ac [SubHashName [...] ]

Returns a list of keys of the hash Fa HashName in the variable Ft $retval .

Parameters:

Ao Fa HashName Ac [SubHashName [...] ]
A string that contains the name of the hash. If the hash is a sub hash of another hash, the Qq father hash name MUST BE WRITTEN FIRST, followed by the sub-hash name.

Return Value: The value of the key Fa Key in the hash Fa HashName . The value is returned in the variable Ft $retval .

hashRemove Ao Fa Key Ac Ao Fa HashName Ac [SubHashName [...] ]

Removes the key Fa Key from the hash Fa HashName .

Aq Fa Key The key we wish to remove from
Fa HashName .
Ao Fa HashName Ac [SubHashName [...] ]
A string that contains the name of the hash. If the hash is a sub hash of another hash, the Qq father hash name MUST BE WRITTEN FIRST, followed by the sub-hash name.

This function should also be used to remove a sub-hash from its Qq father hash . In that case, the Fa key will be the name of the sub-hash.

hashDelete Ao Fa HashName Ac [SubHashName [...] ]

Deletes the hash Fa HashName Op SubHashName Op ... .

Parameters:

Ao Fa HashName Ac [SubHashName [...] ]
A string that contains the name of the hash. If the hash is a sub hash of another hash, the Qq father hash name MUST BE WRITTEN FIRST, followed by the sub-hash name.

If this function is used on a sub-hash, a key with the name of the sub-hash will remain in its Qq father hash and will hold a NULL value.

BUGS

A hash name can only contain characters that are valid as part of bash variable names (i.e. a-zA-Z0-9_). The same applies for hash keys.

As for now, there is no way of knowing if a key represents a value or a sub-hash. If a sub-hash will be used as a key, the returned value will be its keys list.

EXAMPLES

Define hash table hashA with key Akey1 with value Aval1 use:
% hashSet Aval1 Akey1 Ahash
Now:
% hashGet Akey1 Ahash
% echo $retval
Aval1
% hashKeys Ahash
% echo $retval
Akey1
%

HISTORY

The idea to write library appeared when we've discovered the full power of the bash eval function.

As of the name , it has two meanings. The first, it means `stash' of hash functions. The second is, that contains subhashes inside, so it looks like stash of packed information.

AUTHORS

An Hai Zaar Aq [email protected] An Gil Ran Aq [email protected]