On Thursday, October 25, 2012 06:40:59 PM Clark WANG wrote:
> See following example:
>
> $ cat foo.sh
> u=root
> echo ~$u
> $ bash foo.sh # bash 4.2.37
> ~root
> $ ksh foo.sh # ksh 93u+ 2012-08-01
> /root
> $
>
> I think bash behavior is correct according to
>
http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_06which
> says tilde expansion should be done before parameter expansion.
And the workaround is pretty nasty...
u=root; id -u "$u" >/dev/null 2>&1 && eval echo ~$u
The beauty of the way Ksh does this is it still scans for unescaped/unquoted
tilde-prefixed words before parameter expansion. There's no chance of
ambiguity, and an unintentional tilde expansion is unlikely.
$ u=\~root; print -r $u
~root
The tilde must lexically precede the $u and be unquoted in order to get tilde
expansion. I'm not so sure this even conflicts with POSIX requirements.
In ksh93v there's now a syntax to get readlink functionality out of tilde
expansion.
$ ( { echo ~{x}; } <<<'' {x}<&0 <&2 )
/proc/32185/fd/13
This is an awesome feature... it would be a shame to require an eval here.
--
Dan Douglas
_______________________________________________
ast-users mailing list
[email protected]
https://mailman.research.att.com/mailman/listinfo/ast-users