---
name: "hashstash"
section: "3"
platform: "linux"
package: "libbash"
version: "0.9.11-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/hashstash"
---

# hashstash(3)

libbash library that implements hash data structure

## NAME

**hashstash** – libbash library that implements hash data structure

## SYNOPSIS

- **hashSet**

  ⟨Value⟩ ⟨Key⟩ ⟨HashName⟩ \[SubHashName \[...\]\]

- *$retval* **hashGet**

  ⟨Key⟩ ⟨HashName⟩ \[SubHashName \[...\]\]

- *$retval* **hashKeys**

  ⟨HashName⟩ \[SubHashName \[...\]\]

- **hashRemove**

  ⟨Key⟩ ⟨HashName⟩ \[SubHashName \[...\]\]

- **hashDelete**

  ⟨HashName⟩ \[SubHashName \[...\]\]

## DESCRIPTION

### General

**hashstash** 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

### Cm hashSet Ao Ns Fa Value Ns Ac Ao Ns Fa Key Ns Ac Ao Ns Fa Hashname Ns Ac Op SubHashName Op ...

Adds a value to the hash.

Parameters:

- ⟨*Value*⟩

  The value to set in  *HashName*\[*Key*\].

- ⟨*Key*⟩

  The key for the value  *Value*.

- ⟨*HashName*⟩ \[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.

*Value* will be the value of the key *Key* in the hash  *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:

**hashSet** **cval1** **ckey1** **A** **B** **C**

### Ft $retval Cm hashGet Ao Ns Fa Key Ns Ac Ao Ns Fa HashName Ns Ac Op SubHashName Op ...

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

Parameters:

- ⟨*Key*⟩

  The key that hold the value we wish to get.

- ⟨*HashName*⟩ \[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.

Return Value:

The value of the key *Key* in the hash  *HashName*. The value is returned in the variable  *$retval*.

### Ft $retval Cm hashKeys Ao Ns Fa HashName Ns Ac Op SubHashName Op ...

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

Parameters:

- ⟨*HashName*⟩ \[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.

Return Value:

The value of the key *Key* in the hash  *HashName*. The value is returned in the variable  *$retval*.

### Cm hashRemove Ao Ns Fa Key Ns Ac Ao Ns Fa HashName Ns Ac Op SubHashName Op ...

Removes the key  *Key* from the hash *HashName*.

- ⟨*Key*⟩

  The key we wish to remove from  *HashName*.

- ⟨*HashName*⟩ \[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.

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

### Cm hashDelete Ao Ns Fa HashName Ns Ac Op SubHashName Op ...

Deletes the hash  *HashName* \[SubHashName \[...\]\].

Parameters:

- ⟨*HashName*⟩ \[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.

If this function is used on a sub-hash, a key with the name of the sub-hash will remain in its  "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  **hashstash** library appeared when we've discovered the full power of the bash  *eval* function.

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

## AUTHORS

Hai Zaar ⟨haizaar@haizaar.com⟩ Gil Ran ⟨gil@ran4.net⟩

## SEE ALSO

[ldbash(1)](/ldbash/1.md), libbash(1)
