1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-06-09 18:38:05 +02:00

52865: Documentation update for 52864

This commit is contained in:
Bart Schaefer 2024-04-01 22:38:27 -07:00
parent 76019f7174
commit 49c6978dbb
4 changed files with 23 additions and 17 deletions

View file

@ -1,5 +1,8 @@
2024-04-01 Bart Schaefer <schaefer@zsh.org> 2024-04-01 Bart Schaefer <schaefer@zsh.org>
* 52865: Doc/Zsh/expn.yo, Doc/Zsh/params.yo, Etc/FAQ.yo:
Documentation update for 52864
* 52864: Src/lex.c, Src/subst.c, Test/D10nofork.ztst, * 52864: Src/lex.c, Src/subst.c, Test/D10nofork.ztst,
Test/V10private.ztst: Change ${|var|...} to ${{var} ...}, Test/V10private.ztst: Change ${|var|...} to ${{var} ...},
limit local REPLY behavior to ${|...}, update tests. limit local REPLY behavior to ${|...}, update tests.

View file

@ -1937,13 +1937,14 @@ split on tt(IFS) unless the tt(SH_WORD_SPLIT) option is set.
cindex(substitution, command, current shell) cindex(substitution, command, current shell)
cindex(substitution, command, non forking) cindex(substitution, command, non forking)
cindex(substitution, nofork) cindex(substitution, nofork)
Substitutions of the form `tt(${|)var(param)tt(|)...tt(})' are similar, Substitutions of the form `tt(${{)var(param)tt(}) ...tt(})' are similar,
except that the substitution is replaced by the value of the parameter except that the substitution is replaced by the value of the parameter
named by var(param). No implicit save or restore applies to var(param) named by var(param). No implicit save or restore applies to var(param)
except as noted for tt(REPLY), and var(param) should em(not) be declared and var(param) should em(not) be declared within the command. No space
within the command. If, after evaluating the expression, var(param) is allowed within `tt(${{)' and space or newline is required after
names an array, array expansion rules apply. However, tt(REPLY) is `tt({)var(param)tt(})'. The var(param) may include a subscript, and if,
always expanded in scalar context, even if assigned an array. after evaluating the expression, var(param) names an array, then array
expansion rules apply to the final substitution.
A command enclosed in braces preceded by a dollar sign, and set off from A command enclosed in braces preceded by a dollar sign, and set off from
the braces by whitespace, like `tt(${ )...tt( })', is replaced by its the braces by whitespace, like `tt(${ )...tt( })', is replaced by its
@ -1954,7 +1955,7 @@ Word splitting does not apply unless tt(SH_WORD_SPLIT) is set, but a
single trailing newline is stripped unless the substitution is enclosed single trailing newline is stripped unless the substitution is enclosed
in double quotes. in double quotes.
Note that because the `tt(${|)...tt(})' and `tt(${ )...tt( })' forms Note that because `tt(${|)...tt(})' and the two related substitutions
must be parsed at once as both string tokens and commands, all other must be parsed at once as both string tokens and commands, all other
braces (`tt({)' or `tt(})') within the command either must be quoted, braces (`tt({)' or `tt(})') within the command either must be quoted,
or must appear in syntactically valid pairs, such as around complex or must appear in syntactically valid pairs, such as around complex

View file

@ -1032,8 +1032,8 @@ the shell.
) )
item(tt(cmdsubst))( item(tt(cmdsubst))(
Command substitution using of the tt(`)var(...)tt(`), Command substitution using of the tt(`)var(...)tt(`),
tt($+LPAR())var(...)tt(RPAR()), tt(${ )var(...)tt( }) or tt($+LPAR())var(...)tt(RPAR()),tt(${{)var(name)tt(}) var(...)tt(}),
tt(${|)var(...)tt(}) constructs. tt(${|)var(...)tt(}), or tt(${ )var(...)tt( }) constructs.
) )
item(tt(equalsubst))( item(tt(equalsubst))(
The tt(=+LPAR())var(...)tt(RPAR()) form of process substitution. The tt(=+LPAR())var(...)tt(RPAR()) form of process substitution.

View file

@ -1047,15 +1047,18 @@ label(211)
) )
Runs code in the current shell context and then substitutes mytt(${REPLY}). Runs code in the current shell context and then substitutes mytt(${REPLY}).
The result is not split into words unless the tt(SH_WORD_SPLIT) option The result is not split into words unless the tt(SH_WORD_SPLIT) option
is set, for example by mytt(${=${| code }}). is set, for example by mytt(${=${| code }}). mytt($REPLY) is a local
parameter within the substitution so its value in the surrounding scope
is not changed.
eit() An extension to #1 eit() An extension to #1
verb( verb(
${|var| code } ${{var} code }
) )
Runs code in the current shell and then substitutes mytt(${var}). If Runs code in the current shell and then substitutes mytt(${var}). If
mytt(${var}) names an array, the result is an array of those elements, mytt(${var}) names an array, the result is an array of those elements,
but no further splitting is done without tt(SH_WORD_SPLIT). but no further splitting is done without tt(SH_WORD_SPLIT). mytt(${var})
is myem(not) local to the substitution.
eit() The traditional ksh form, except that the closing mytt(;) eit() The traditional ksh form, except that the closing mytt(;)
may usually be omitted: may usually be omitted:
@ -1071,12 +1074,11 @@ label(211)
In all three forms mytt(code) behaves myem(similarly) to an anonymous In all three forms mytt(code) behaves myem(similarly) to an anonymous
function invoked like: function invoked like:
verb( verb(
() { local REPLY; code } "$@" () { code } "$@"
) )
Thus, mytt($REPLY) is implicitly local and returns to its previous Thus, all parameters declared inside the substitution are local by
value after the substitution ends, all other parameters declared from default, and positional parameters mytt($1), mytt($2), etc. are those
inside the substitution are also local by default, and positional of the calling context.
parameters mytt($1), mytt($2), etc. are those of the calling context.
The most significant limitation is that braces (mytt({) and mytt(})) The most significant limitation is that braces (mytt({) and mytt(}))
within the substitutions must either be in balanced pairs, or must be within the substitutions must either be in balanced pairs, or must be
@ -1096,7 +1098,7 @@ sect(Comparisons of forking and non-forking command substitution)
bash and ksh, unquoted non-forking substitutions behave like parameter bash and ksh, unquoted non-forking substitutions behave like parameter
expansions with respect to the tt(SH_WORD_SPLIT) option. expansions with respect to the tt(SH_WORD_SPLIT) option.
Both of the mytt(${|...}) formats retain any trailing newlines, Both mytt(${|...}) and mytt(${{var} ...}) retain any trailing newlines,
except as handled by the tt(SH_WORD_SPLIT) option, consistent with except as handled by the tt(SH_WORD_SPLIT) option, consistent with
mytt(${|...}) from mksh. mytt(${ command }) removes a single final mytt(${|...}) from mksh. mytt(${ command }) removes a single final
newline, but mytt("${ command }") retains it. This differs from newline, but mytt("${ command }") retains it. This differs from