Hello.

Harvey wrote in
 <031f00da-4016-4311-b397-1c04e373d...@gmx.de>:
 |Sorry, posted the wrong version of the pack_args() funtion:
 |I have payed with possible solutions for so long that I forgot the
 |restore the original before posting  -blush-
 |
 |Here is the original version:
 |------------------------------------------------------------------------
 |
 |# Packs arguments into a single string.
 |#
 |# Input:
 |#   $1 = name of variable receiving the arguments in such a way that
 |#        (re)evaluating them provides the original arguments
 |#   $2... = arguments

Dunno about yours, but Robert Elz (kre) did such in a way that is
portable to any shell i tried it with (// is definitely not
portable); with only slight changes of mine, as attached.

 |# Example:
 |#   func() {
 |#     local args
 |#     pack_args args "$@"
 |#     send_rpc func_impl "$args"
 |#   }
 |#   # (in another process)
 |#   receive_rpc() {
 |#     local func="$1"
 |#     local args="$2"
 |#     eval $func "$args"
 |#   }
 |pack_args()
 |{
 |     local _p _resvar=$1 _result= _value
 |     shift
 |     for _p
 |     do
 |         _result="$_result '${_p//'/'\"'\"'}'"
 |     done
 |     eval $_resvar=\${_result\# }
 |}

--steffen
|
|Der Kragenbaer,                The moon bear,
|der holt sich munter           he cheerfully and one by one
|einen nach dem anderen runter  wa.ks himself off
|(By Robert Gernhardt)
#!/bin/sh -
#@ Round trip quote strings in POSIX shell.  For example
#@   set -- x 'a \ b' "foo'" "\\'b\\a\\r\\" AƤ
#@   printf "%s: <%s><%s><%s><%s><%s>\n" "$#" "${1}" "${2}" "${3}" "$4" "$5"
#@   saved_parameters=`quote_rndtrip "$@"`
#@   eval "set -- $saved_parameters"
#@   printf "%s: <%s><%s><%s><%s><%s>\n" "$#" "${1}" "${2}" "${3}" "$4" "$5"
#
# 2017 Robert Elz (kre).
# 2017 - 2022 Steffen Nurpmeso <stef...@sdaoden.eu>.
# Public Domain

# Though slower use a subshell version instead of properly restoring $IFS
# and flags, as elder shells may not be able to properly restore flags via
# "set +o" as later standardized in POSIX, and it seems overkill to handle
# all possible forms of output "set +o" may or may not actually generate.
quote__rndtrip() (
	case "$1" in
	*\'*) ;;
	*) printf "'%s'" "$1"; return 0;;
	esac
	a="$1" s= e=
	while case "$a" in
		\'*) a=${a#?}; s="${s}\\\\'";;
		*\') a=${a%?}; e="${e}\\\\'";;
		'') printf "${s}${e}"; exit 0;;
		*) false;;
		esac
	do
		continue
	done
	IFS=\'
	set -f
	set -- $a
	r="${1}"
	shift
	for a
	do
		r="${r}'\\''${a}"
	done
	printf "${s}'%s'${e}" "${r}"
	exit 0
)

quote_rndtrip() (
	j=
	for i
	do
		[ -n "$j" ] && printf ' '
		j=' '
		quote__rndtrip "$i"
	done
)

quote_string() (
	j=
	for i
	do
		[ -n "$j" ] && printf '\\ '
		j=' '
		quote__rndtrip "$i"
	done
)

# s-sht-mode
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to