From 27a916fd0042e1ed6d3c043cd96cc5c0fdbce538 Mon Sep 17 00:00:00 2001 From: Vidar Holen Date: Thu, 4 Jul 2019 19:12:23 -0700 Subject: [PATCH] Updated SC2251 (markdown) --- SC2251.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/SC2251.md b/SC2251.md index 1200185..5013f3f 100644 --- a/SC2251.md +++ b/SC2251.md @@ -11,7 +11,7 @@ set -e ```sh set -e -{ ! false; } +false && exit 1 ``` ### Rationale: @@ -20,19 +20,20 @@ ShellCheck has found a command inverted with `!` that may have no effect. In par The most common reason for this is thinking that it'll trigger `set -e` aka `errexit` if a command succeeds, as in the example. This is not the case: `!` will inhibit errexit both on success and failure of the inverted command. -Wrapping such an inverted command in a brace group will trigger `errexit` as expected, since the brace group will act as a standalone command with the same exit code. +Using `&& exit ` will instead exit when failure when the command succeeds. ### Exceptions: ShellCheck will not detect cases where `$?` is implicitly or explicitly used to check the value afterwards: ``` +set -e; check_success() { [ $? -eq 0 ] || exit 1; } ! false; check_success ! true; check_success ``` -In this case, you can [[ignore]] the warning, or optionally wrap them in `{ ! false; }`. +In this case, you can [[ignore]] the warning. ### Related resources: