summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBart Schaefer <schaefer@zsh.org>2024-01-05 20:38:58 -0800
committerBart Schaefer <schaefer@zsh.org>2024-01-05 20:38:58 -0800
commitd6e4ddd4d48b6ac9c0a29b95e0e2fc0e6012d725 (patch)
tree17e0b496d09c024cfa729eba8aee84c708a1b893
parenta528af5c57436c730144e35d97547163c57c8420 (diff)
downloadzsh-d6e4ddd4d48b6ac9c0a29b95e0e2fc0e6012d725.tar.gz
zsh-d6e4ddd4d48b6ac9c0a29b95e0e2fc0e6012d725.zip
52465: use NULL_GLOB when expanding zmv input pattern to avoid NOMATCH exit
-rw-r--r--ChangeLog5
-rw-r--r--Doc/Zsh/contrib.yo8
-rw-r--r--Functions/Misc/zmv8
3 files changed, 16 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index e7b785c7f..1c7e7786f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2024-01-05 Bart Schaefer <schaefer@zsh.org>
+
+ * 52465: Doc/Zsh/contrib.yo, Functions/Misc/zmv: use NULL_GLOB
+ when expanding the input pattern to avoid NOMATCH exit
+
2023-12-06 Jun-ichi Takimoto <takimoto-j@kba.biglobe.ne.jp>
* 52413: Completion/Unix/Command/_iconv: support Citrus version
diff --git a/Doc/Zsh/contrib.yo b/Doc/Zsh/contrib.yo
index f43ac2257..e1781a5e1 100644
--- a/Doc/Zsh/contrib.yo
+++ b/Doc/Zsh/contrib.yo
@@ -4668,10 +4668,10 @@ renames `tt(foo.lis)' to `tt(foo.txt)', `tt(my.old.stuff.lis)' to
The pattern is always treated as an tt(EXTENDED_GLOB) pattern. Any file
whose name is not changed by the substitution is simply ignored. Any
-error (a substitution resulted in an empty string, two substitutions gave
-the same result, the destination was an existing regular file and tt(-f)
-was not given) causes the entire function to abort without doing
-anything.
+error (no files matched the var(srcpat), substitution resulted in an empty
+string, two substitutions gave the same result, the destination was an
+existing regular file and tt(-f) was not given) causes the entire function
+to abort without doing anything.
In addition to pattern replacement, the variable tt($f) can be referred
to in the second (replacement) argument. This makes it possible to
diff --git a/Functions/Misc/zmv b/Functions/Misc/zmv
index 269fe5ba5..5c03e9ea1 100644
--- a/Functions/Misc/zmv
+++ b/Functions/Misc/zmv
@@ -236,12 +236,18 @@ if [[ $pat = (#b)(*)\((\*\*##/)\)(*) ]]; then
else
fpat=$pat
fi
-files=(${~fpat})
[[ -n $hasglobqual ]] && pat=$opat
errs=()
+() {
+ # (#qN) breaks bareglobqual -Q option, so:
+ setopt localoptions nullglob
+ files=(${~fpat})
+}
+(( ${#files} )) || errs=( "no files matched \`$fpat'" )
+
for f in $files; do
if [[ $pat = (#b)(*)\(\*\*##/\)(*) ]]; then
# This looks like a recursive glob. This isn't good enough,