[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Help-bash] starting a central bash script repository
From: |
Dan Douglas |
Subject: |
Re: [Help-bash] starting a central bash script repository |
Date: |
Sun, 07 Apr 2013 14:37:57 -0500 |
User-agent: |
KMail/4.8.3 (Linux/3.4.6-pf+; KDE/4.8.3; x86_64; ; ) |
On Saturday, April 06, 2013 06:55:09 PM Chris F.A. Johnson wrote:
> On Sat, 6 Apr 2013, Peng Yu wrote:
>
> > Bash code is not reusable in any sane way. You can't pass array names
> > to functions, for example
>
> One certainly can pass array names to functions. I have a library
> of functions that take array names as arguments:
> <http://cfajohnson.com/shell/?2013-01-08_bash_array_manipulation>.
>
> > (this is the #1 problem with writing "libraries" of bash code).
>
> I don't have any problem writing libraries of bash code; I have
> dozens of them.
>
The point is it's exceedingly difficult to do it safely. You'll never have a
really robust "library language" without some way around the dynamic scope
encapsulation problem. For example, I think this ksh93 function will never be
possible in Bash, even though this is perfectly valid Bash 4.3 code:
function f {
case $1 in
0)
typeset -a x=(I\'m an x)
f 1 x
;;
1)
typeset -n a=$2
typeset -a x=(I\'m a different x)
f 2 a x
;;
2)
typeset -n x=$2 y=$3
typeset -p x y
printf "<%s> " "${x[*]}" "${y[*]}"
echo
esac
}
f 0
# typeset -n x=x
# typeset -n y=x
# <I'm an x> <I'm a different x>
--
Dan Douglas