The zsh/db/gdbm Module (zsh)

### 22.11 The zsh/db/gdbm Module ¶

The `zsh/db/gdbm` module is used to create "tied" associative arrays that interface to database files. If the GDBM interface is not available, the builtins defined by this module will report an error. This module is also intended as a prototype for creating additional database interfaces, so the `ztie` builtin may move to a more generic module in the future.

The builtins in this module are:

`ztie -d db/gdbm -f` filename [ `-r` ] arrayname ¶

  Open the GDBM database identified by filename and, if successful, create the associative array arrayname linked to the file. To create a local tied array, the parameter must first be declared, so commands similar to the following would be executed inside a function scope:

      local -A sampledb
      ztie -d db/gdbm -f sample.gdbm sampledb

  The `-r` option opens the database file for reading only, creating a parameter with the readonly attribute. Without this option, using ‘`ztie`’ on a file for which the user does not have write permission is an error. If writable, the database is opened synchronously so fields changed in arrayname are immediately written to filename.

  Changes to the file modes filename after it has been opened do not alter the state of arrayname, but ‘`typeset -r` arrayname’ works as expected.

`zuntie` [ `-u` ] arrayname ... ¶

  Close the GDBM database associated with each arrayname and then unset the parameter. The `-u` option forces an unset of parameters made readonly with ‘`ztie -r`’.

  This happens automatically if the parameter is explicitly unset or its local scope (function) ends. Note that a readonly parameter may not be explicitly unset, so the only way to unset a global parameter created with ‘`ztie -r`’ is to use ‘`zuntie -u`’.

`zgdbmpath` parametername ¶

  Put path to database file assigned to parametername into `REPLY` scalar.

`zgdbm_tied` ¶

  Array holding names of all tied parameters.

The fields of an associative array tied to GDBM are neither cached nor otherwise stored in memory, they are read from or written to the database on each reference. Thus, for example, the values in a readonly array may be changed by a second writer of the same database file.