Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: [PATCH] don't exit shell on [[ -o invalid@option ]]



Daniel Shahaf wrote on Mon, Nov 20, 2017 at 01:22:41 +0000:
> I'm quite swamped this week (in a good way) but when I get a chance I'll
> finish the patch and push.  (Needs more tests and a README blurb, at least)

Interdiff:

diff --git a/README b/README
index 6fad1d516..59abf29b2 100644
--- a/README
+++ b/README
@@ -54,6 +54,18 @@ foo=([aeiou]\=vowel)
 This is only required for array values contained within parentheses;
 command line expansion for normal arguments has not changed.
 
+3) The syntax
+
+[[ -o foo ]]
+
+where foo is not the name of a shell option (with optional underscores
+and optional "no" prefix) used to be treated as a syntax error, i.e.,
+the enclosing command line or file were aborted.  It now emits a warning
+and returns a non-zero exit code.  For further details, see the
+documentation of the -o switch in the chapter "Conditional Expressions"
+in the zshmisc(1) manual.
+
+
 Incompatibilities between 5.3.1 and 5.4.2
 -----------------------------------------
 
diff --git a/Test/C02cond.ztst b/Test/C02cond.ztst
index 04e1ca8f2..4ffb07dd4 100644
--- a/Test/C02cond.ztst
+++ b/Test/C02cond.ztst
@@ -440,14 +440,15 @@ F:Failures in these cases do not indicate a problem in the shell.
 >  [[ 'a' == 'b' || 'b' = 'c' || 'c' != 'd' ]]
 >}
 
-  (setopt posixbuiltins; eval '[[ -o invalidoption ]]; echo set: $?'; echo "no warning" >&2)
+  (setopt posixbuiltins; [[ -o invalidoption ]]; echo set: $?; echo "line 1: no warning" >&2)
   (unsetopt posixbuiltins; [[ -o invalidoption ]]; echo unset: $?)
   [[ -o invalidoption || -n nonempty ]]; echo "in disjunction, true: $?"
   [[ -o invalidoption || -z nonempty ]]; echo "in disjunction, false: $?"
   [[ ! -o invalidoption ]]; echo "negated: $?"
+  [[ -o invalidoption && -n nonempty ]] || echo "in conjunction: $?"
 0:-o invalidoption
 >set: 1
-?no warning
+?line 1: no warning
 >unset: 3
 ?(eval):2: no such option: invalidoption
 >in disjunction, true: 0
@@ -456,6 +457,8 @@ F:Failures in these cases do not indicate a problem in the shell.
 ?(eval):4: no such option: invalidoption
 >negated: 3
 ?(eval):5: no such option: invalidoption
+>in conjunction: 3
+?(eval):6: no such option: invalidoption
 
 %clean
   # This works around a bug in rm -f in some versions of Cygwin



Messages sorted by: Reverse Date, Date, Thread, Author