ntup{x,l,r} - tuples that can be nested and without quoting issues, base64 encoded elements

This commit is contained in:
tpoindex 2019-09-11 20:58:30 -06:00 committed by Sławomir Śledź
parent b40adbb643
commit 7736a293a0
2 changed files with 42 additions and 0 deletions

View file

@ -286,6 +286,36 @@ tupr() {
tupx 1- "$@" | last
}
ntup() {
if [[ $# -eq 0 ]]; then
local arg
read arg
ntup $arg
else
list "$@" | map lambda x . 'echo "$x" | base64 --wrap=0 ; echo' | join , '(' ')'
fi
}
ntupx() {
if [[ $# -eq 1 ]]; then
local arg
read arg
ntupx "$1" "$arg"
else
local n=$1
shift
echo "$@" | stripl '(' | stripr ')' | cut -d',' -f${n} | tr , '\n' | map lambda x . 'echo "$x" | base64 -d'
fi
}
ntupl() {
ntupx 1 "$@"
}
ntupr() {
ntupx 1- "$@" | last
}
zip() {
local list=$*
cat - | while read x; do

View file

@ -69,4 +69,16 @@ testTupr() {
assertEquals '5' "$(tup 5 | tupr)"
}
testNTup() {
assertEquals '(KFlRbz0sWWdvPSkK,Ywo=)' "$(ntup $(ntup a b) c)"
assertEquals '(YQo=,Ygo=)' "$(ntupl '(KFlRbz0sWWdvPSkK,Ywo=)')"
assertEquals 'a' "$(ntupl '(YQo=,Ygo=)')"
assertEquals 'b' "$(ntupr '(YQo=,Ygo=)')"
assertEquals 'c' "$(ntupr '(KFlRbz0sWWdvPSkK,Ywo=)')"
assertEquals 'a' "$(ntup $(ntup a b) c | ntupx 1 | ntupx 1)"
assertEquals 'b' "$(ntup $(ntup a b) c | ntupx 1 | ntupx 2)"
assertEquals 'c' "$(ntup $(ntup a b) c | ntupx 2)"
assertEquals 'a b' "$(ntup $(ntup a b) c | ntupx 1 | ntupx 1,2 | unlist)"
}
. ./shunit2-init.sh