Adrien Kunysz, Thu, Oct 17 2013 04:41:21 CEST
About one month ago I was sitting in the supposedly oldest pub of Dublin with a couple of Serbian dudes. We ended up discussing shell scripting.
- You could do it [no I don't remember what "it" was] easily in Bash with an associative array but that doesn't exist in POSIX shell.
- Well, you can always reimplement them.
- That's going to take a lot of code.
[30 seconds pause]
- Actually, there is a very easy way.
# No argument.
# Print symbolic name for the new associative array on stdout,
# later referred to as "$ht".
hcreate() {
mktemp -d --tmpdir
}
# hput $ht $key $value
# Set the value of $key to $value in $ht.
hput() {
echo "$3" > "$1/$2"
}
# hexists $ht $key
# Return success iff $key exists in $ht.
hexists() {
test -f "$1/$2"
}
# hget $ht $key
# Print the value of $key in $ht on stdout.
hget() {
cat "$1/$2"
}
# hdel $ht $key
# Remove the key $key from $ht.
hdel() {
rm "$1/$2"
}
# hdestroy $ht
# Release all resources associated to $ht.
hdestroy() {
rm -r "$1"
}
There are some obvious limitations that can be easily fixed but I am aiming for brevity here:
mktemp(1)
which, AFAIK, is not in POSIX;As for the performance discussion, I leave that to the readers.