1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-05-06 07:36:20 +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>
* 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,
Test/V10private.ztst: Change ${|var|...} to ${{var} ...},
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, non forking)
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
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
within the command. If, after evaluating the expression, var(param)
names an array, array expansion rules apply. However, tt(REPLY) is
always expanded in scalar context, even if assigned an array.
and var(param) should em(not) be declared within the command. No space
is allowed within `tt(${{)' and space or newline is required after
`tt({)var(param)tt(})'. The var(param) may include a subscript, and if,
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
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
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
braces (`tt({)' or `tt(})') within the command either must be quoted,
or must appear in syntactically valid pairs, such as around complex

View File

@ -1032,8 +1032,8 @@ the shell.
)
item(tt(cmdsubst))(
Command substitution using of the tt(`)var(...)tt(`),
tt($+LPAR())var(...)tt(RPAR()), tt(${ )var(...)tt( }) or
tt(${|)var(...)tt(}) constructs.
tt($+LPAR())var(...)tt(RPAR()),tt(${{)var(name)tt(}) var(...)tt(}),
tt(${|)var(...)tt(}), or tt(${ )var(...)tt( }) constructs.
)
item(tt(equalsubst))(
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}).
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
verb(
${|var| code }
${{var} code }
)
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,
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(;)
may usually be omitted:
@ -1071,12 +1074,11 @@ label(211)
In all three forms mytt(code) behaves myem(similarly) to an anonymous
function invoked like:
verb(
() { local REPLY; code } "$@"
() { code } "$@"
)
Thus, mytt($REPLY) is implicitly local and returns to its previous
value after the substitution ends, all other parameters declared from
inside the substitution are also local by default, and positional
parameters mytt($1), mytt($2), etc. are those of the calling context.
Thus, all parameters declared inside the substitution are local by
default, and positional parameters mytt($1), mytt($2), etc. are those
of the calling context.
The most significant limitation is that braces (mytt({) and mytt(}))
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
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
mytt(${|...}) from mksh. mytt(${ command }) removes a single final
newline, but mytt("${ command }") retains it. This differs from