From 76d095df9de31d46b0ca042039855ffc286f5fdb Mon Sep 17 00:00:00 2001
From: Peter Stephenson
Date: Thu, 2 Feb 2023 10:12:17 +0000
Subject: 51306: error message in ${unset?error} should be expanded
---
ChangeLog | 3 +++
Doc/Zsh/expn.yo | 4 +++-
Src/subst.c | 6 +++++-
Test/D04parameter.ztst | 5 +++++
4 files changed, 16 insertions(+), 2 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index ee9a623d4..6bdaeedbf 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2023-02-02 Peter Stephenson
+ * 51306: Doc/Zsh/expn.yo, Src/subst.c, Test/D04parameter.ztst:
+ error message in ${unset?...} should be expanded.
+
* 51307: Src/input.c, Src/parse.c, Test/A02alias.ztst: error
on attempt to expand alias in function definition name didn't
find the original alias and printed an extra error.
diff --git a/Doc/Zsh/expn.yo b/Doc/Zsh/expn.yo
index ad55c24ba..fd5443b20 100644
--- a/Doc/Zsh/expn.yo
+++ b/Doc/Zsh/expn.yo
@@ -665,7 +665,9 @@ item(tt(${)var(name)tt(:?)var(word)tt(}))(
In the first form, if var(name) is set, or in the second form if var(name)
is both set and non-null, then substitute its value; otherwise, print
var(word) and exit from the shell. Interactive shells instead return to
-the prompt. If var(word) is omitted, then a standard message is printed.
+the prompt. If var(word) is omitted, then a standard message is
+printed. Note that var(word) is expanded even though its value
+is not substituted onto the command line.
)
enditem()
diff --git a/Src/subst.c b/Src/subst.c
index 897188862..4ad9fee1a 100644
--- a/Src/subst.c
+++ b/Src/subst.c
@@ -3076,7 +3076,11 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int pf_flags,
if (vunset) {
if (isset(EXECOPT)) {
*idend = '\0';
- zerr("%s: %s", idbeg, *s ? s : "parameter not set");
+ if (*s){
+ singsub(&s);
+ zerr("%s: %s", idbeg, s);
+ } else
+ zerr("%s: %s", idbeg, "parameter not set");
/*
* In interactive shell we need to return to
* top-level prompt --- don't clear this error
diff --git a/Test/D04parameter.ztst b/Test/D04parameter.ztst
index 29275f13f..a11652d1e 100644
--- a/Test/D04parameter.ztst
+++ b/Test/D04parameter.ztst
@@ -110,6 +110,11 @@
*>*foo:1: 1: no arguments given
>reached
+ message="expand me and remove quotes"
+ (: ${UNSET_PARAM?$message})
+1:${...?....} performs expansion on the message
+?(eval):2: UNSET_PARAM: expand me and remove quotes
+
print ${set1:+word1} ${set1+word2} ${null1:+word3} ${null1+word4}
print ${unset1:+word5} ${unset1+word6}
0:${...:+...}, ${...+...}
--
cgit 1.4.1