Steven Penny wrote in <[email protected]>:
|The Bash shell makes it possible to create arrays:
|
|https://gnu.org/software/bash/manual/html_node/Arrays
|
|Dash shell currently does not have this feature. A workaround is to \
|use ARGV:
|
| $ set aaa bbb ccc
| $ echo "$2"
| bbb
|
|However this is limited as only one array can exist at a time, while \
|Bash allows
|multiple arrays to exist at a time:
|
| $ gg=(aaa bbb ccc)
| $ hh=(ddd eee fff)
| $ echo "${gg[1]} ${hh[1]}"
| bbb eee
kre happily shared his code to quote from and to variables:
#@ Round trip quote strings in POSIX shell. E.g.,
#@ 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"
# 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 standardized in POSIX, and it seems overkill to handle all
# possible forms of output that "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__
_result_="${1}"
shift
for __A__
do
_result_="${_result_}'\\''${__A__}"
done
printf "${__S__}'%s'${__E__}" "${_result_}"
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
}
--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)