From 62b76b26b4a8afc6987b65f0ad02a18dee093f2e Mon Sep 17 00:00:00 2001 From: Andreas Nordal Date: Mon, 8 Feb 2016 19:49:26 +0100 Subject: Reinstate failglob behaviour for most commands Expand globs to zero arguments (nullglob) only for set, for and count. The warning about failing globs, and setting the accompanying $status, now happens regardless of mode, interactive or not. It is assumed that the above commands are the common cases where nullglob behaviour is desirable. More importantly, doing this with `set` is a real feature enabler, since the resulting empty array can be passed on to any command. The previous behaviour was actually all nullglob (since commit cab115c8b9933ae7db9412c66d452c0ccb2d7152), but this was undocumented; the failglob warning was still printed in interactive mode, and the documentation was bragging about failglob behaviour. --- doc_src/index.hdr.in | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'doc_src') diff --git a/doc_src/index.hdr.in b/doc_src/index.hdr.in index dd6355db..7f2b30c4 100644 --- a/doc_src/index.hdr.in +++ b/doc_src/index.hdr.in @@ -413,8 +413,19 @@ Examples: - `**` matches any files and directories in the current directory and all of its subdirectories. -Note that if no matches are found for a specific wildcard, it will expand into zero arguments, i.e. to nothing. If none of the wildcarded arguments sent to a command result in any matches, the command will not be executed. If this happens when using the shell interactively, a warning will also be printed. +Note that for most commands, if any wildcard fails to expand, the command is not executed, `$status` is set to nonzero, and a warning is printed. This behavior is consistent with setting `shopt -s failglob` in bash. There are exactly 3 exceptions, namely `set`, `count` and `for`. Their globs are permitted to expand to zero arguments, as with `shopt -s nullglob` in bash. +Examples: +\fish +ls *.foo +# Lists the .foo files, or warns if there aren't any. + +set foos *.foo +if test (count $foos) -ge 1 + ls $foos +end +# Lists the .foo files, if any. +\endfish \subsection expand-command-substitution Command substitution -- cgit v1.2.3