summaryrefslogtreecommitdiff
path: root/.local/bin/push.sh
blob: b48e59ca508c6ea7f0316f18000e39953cdecf6d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/usr/bin/env cat
# Push, Encodes arrays correctly as strings with Posix Shell only.
# Meaning we can use this script in any Posix shell (bash, zsh, ksh, dash, ...).
#
# taken from: https://github.com/vaeth/push/blob/main/bin/push.sh
Push() {
	case $1 in
	-c)
		PushA_=
		shift;;
	*)
		eval PushA_=\$$1;;
	esac
	PushB_=$1
	shift
	for PushE_
	do	[ -z "${PushA_:++}" ] || PushA_="$PushA_ "
		unset PushF_
		case ${PushE_:-=} in
		[=~]*)
			PushF_=false;;
		esac
		PushC_=$PushE_
		while PushD_=${PushC_%%\'*}
		do	if ${PushF_-:} && case $PushD_ in
			*[!-+=~@%/:.,_0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]*)
				false;;
			esac
			then	PushA_=$PushA_$PushD_
			else	PushA_="$PushA_'$PushD_'"
				unset PushF_
			fi
			[ x"$PushD_" = x"$PushC_" ] && break || \
			PushA_=$PushA_\\\'
			PushC_=${PushC_#*\'}
		done
	done
	eval "$PushB_=\$PushA_
	unset PushA_ PushB_ PushC_ PushD_ PushE_
	[ -n \"\${$PushB_:++}\" ]" || return 1
}