1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-05-18 14:06:03 +02:00

52325: Clarify doc for edge cases of named references and nofork substitution

Unposted whitespace change avoids a parse error in ${ ... } with comments.
This commit is contained in:
Bart Schaefer 2023-11-23 13:23:55 -08:00
parent 7a84713bb7
commit fbec213cc5
6 changed files with 25 additions and 13 deletions

View File

@ -1,3 +1,12 @@
2023-11-23 Bart Schaefer <schaefer@zsh.org>
* 52325: Doc/Zsh/expn.yo, Doc/Zsh/mod_ksh93.yo, Doc/Zsh/params.yo:
Clarify side-effects of $argv and named references to specials,
update ksh93 feature compatibility.
unposted: Src/subst.c, Test/D10nofork.ztst: whitespace tweak to
avoid unexpected parse error when comments are used in ${ ... }
2023-11-22 Oliver Kiddle <opk@zsh.org>
* unposted: Completion/Unix/Command/_ri: fix missing closing brace

View File

@ -1600,6 +1600,10 @@ example(tt(before local: OUTER)
tt(by reference: OUTER)
tt(after func: RESULT))
Note, however, that named references to em(special) parameters acquire
the behavior of the special parameter, regardless of the scope where
the reference is declared.
When var(rname) includes an array subscript, the subscript expression
is interpreted at the time tt(${)var(pname)tt(}) is expanded. Any
form of subscript is allowed, including those that select individual
@ -1929,7 +1933,9 @@ Note that because the `tt(${|)...tt(})' and `tt(${ )...tt( })' forms
must be parsed at once as both string tokens and commands, all other
braces (`tt({)' or `tt(})') within the command either must be quoted,
or must appear in syntactically valid pairs, such as around complex
commands, function bodies, or parameter references.
commands, function bodies, or parameter references. Furthermore,
comments are always recognized, even when tt(NO_INTERACTIVE_COMMENTS)
is in effect.
texinode(Arithmetic Expansion)(Brace Expansion)(Command Substitution)(Expansion)
sect(Arithmetic Expansion)

View File

@ -184,13 +184,6 @@ When a function of this name is defined, it is called whenever the
parameter var(name) would be unset. The function must explicitly
`tt(unset )var(name)', otherwise the variable remains set.
em(THIS FEATURE IS NOT YET IMPLEMENTED.)
)
item(tt(${ )var(list)tt(;}))(
Note the space after the opening brace (tt({)). This executes var(list)
in the current shell and substitutes its standard output in the manner
of `tt($LPAR())var(list)tt(RPAR())' but without forking.
em(THIS FEATURE IS NOT YET IMPLEMENTED.)
)
item(tt(typeset -C )var(name)[tt(=)var(values)tt( ...)])(

View File

@ -748,9 +748,13 @@ vindex(argv)
item(tt(argv) <S> <Z>)(
Same as tt(*). Assigning to tt(argv) changes the local positional
parameters, but tt(argv) is em(not) itself a local parameter.
Deleting tt(argv) with tt(unset) in any function deletes it everywhere,
although only the innermost positional parameter array is deleted (so
tt(*) and tt(@) in other scopes are not affected).
Deleting tt(argv) with tt(unset) in any function deletes it everywhere.
This can be avoided by declaring `tt(local +h argv)' before unsetting.
Even when not so declared, only the innermost positional parameter
array is deleted (so tt(*) and tt(@) in other scopes are not affected).
A named reference to tt(argv) em(does not) permit a called function to
access the positional parameters of its caller.
)
vindex(@)
item(tt(@) <S>)(

View File

@ -1956,7 +1956,7 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int pf_flags,
* Then fall through to the regular handling of $REPLY
* to manage word splitting, expansion flags, etc.
*/
char *outfmt = ">| %s { %s ;}"; /* 13 */
char *outfmt = ">| %s {\n%s\n;}"; /* 13 */
if ((rplytmp = gettempname(NULL, 1))) {
/* Prevent shenanigans with $TMPPREFIX */
char *tmpfile = quotestring(rplytmp, QT_BACKSLASH);

View File

@ -422,7 +422,7 @@ F:must do this before evaluating the next test block
purr ${ { echo nested } } DONE
1:ignored braces, part 4
?(eval):1: parse error near `}'
?(eval):3: parse error near `}'
# "break" blocks function calls in outer loop
# Could use print, but that might get fixed