Last active
August 4, 2022 17:02
-
-
Save TekWizely/c0259f25e18f2368c4a577495cd566cd to your computer and use it in GitHub Desktop.
Script to Serialize / Deserialize a Bash Array to/from a String - Requires knowing one character NOT present in the array, to be used as the separator.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# shellcheck shell=bash | |
## | |
# serialize_array | |
# Serializes a bash array to a string, with a configurable seperator. | |
# | |
# $1 = source varname ( contains array to be serialized ) | |
# $2 = target varname ( will contian the serialized string ) | |
# $3 = seperator ( optional, defaults to $'\x01' ) | |
# | |
# example: | |
# | |
# my_arry=( one "two three" four ) | |
# serialize_array my_array my_string '|' | |
# declare -p my_string | |
# | |
# result: | |
# | |
# declare -- my_string="one|two three|four" | |
# | |
function serialize_array() { | |
declare -n _array="${1}" _str="${2}" # _array, _str => local reference vars | |
local IFS="${3:-$'\x01'}" | |
# shellcheck disable=SC2034 # Reference vars assumed used by caller | |
_str="${_array[*]}" # * => join on IFS | |
} | |
## | |
# deserialize_array | |
# Deserializes a string into a bash array, with a configurable seperator. | |
# | |
# $1 = source varname ( contains string to be deserialized ) | |
# $2 = target varname ( will contain the deserialized array ) | |
# $3 = seperator ( optional, defaults to $'\x01' ) | |
# | |
# example: | |
# | |
# my_string="one|two three|four" | |
# deserialize_array my_string my_array '|' | |
# declare -p my_array | |
# | |
# result: | |
# | |
# declare -a my_array=([0]="one" [1]="two three" [2]="four") | |
# | |
function deserialize_array() { | |
IFS="${3:-$'\x01'}" read -r -a "${2}" <<<"${!1}" # -a => split on IFS | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment