# line ends with pipe "...|" -- valid; not missing "&&"
/|[ ]*$/bcont
# missing end-of-line "&&" -- mark suspect
-/&&[ ]*$/!s/^/?!AMP?!/
+/&&[ ]*$/!s/$/ ?!AMP?!/
:cont
# retrieve and print previous line
x
# that line legitimately lacks "&&"
:else
x
-s/?!AMP?!//
+s/ ?!AMP?!$//
x
bcont
# "suspect" from final contained line since that line legitimately lacks "&&"
:done
x
-s/?!AMP?!//
+s/ ?!AMP?!$//
x
# is 'done' or 'fi' cuddled with ")" to close subshell?
/done.*)/bclose
# since that line legitimately lacks "&&" and exit subshell loop
:clssolo
x
-s/?!AMP?!//
+s/ ?!AMP?!$//
p
x
s/^/>/
baz
>) &&
(
-?!AMP?! bar=$((42 + 1))
+ bar=$((42 + 1)) ?!AMP?!
baz
>)
bar &&
{
echo c
-?!AMP?! }
+ } ?!AMP?!
baz
>)
(
foo &&
-?!AMP?! bar
+ bar ?!AMP?!
baz &&
wop
>)
case "$x" in
x) foo ;;
*) bar ;;
-?!AMP?! esac
+ esac ?!AMP?!
foobar
>) &&
(
case "$x" in 1) true;; esac &&
-?!AMP?! case "$y" in 2) false;; esac
+ case "$y" in 2) false;; esac ?!AMP?!
foobar
>)
baz
>) &&
(
-?!AMP?! bar=$(gobble blocks)
+ bar=$(gobble blocks) ?!AMP?!
baz
>)
>) &&
(
-?!AMP?!cd foo
+cd foo ?!AMP?!
bar
>) &&
> bar) &&
(
-?!AMP?!cd foo
+cd foo ?!AMP?!
> bar)
(
for i in a b c
do
-?!AMP?! echo $i
+ echo $i ?!AMP?!
cat
-?!AMP?! done
+ done ?!AMP?!
for i in a b c; do
echo $i &&
cat $i
(
x=$(bobble &&
-?!AMP?!>> wiffle)
+>> wiffle) ?!AMP?!
echo $x
>)
(
-?!AMP?! cat && echo "multi-line string"
+ cat && echo "multi-line string" ?!AMP?!
bap
>)
do
if false
then
-?!AMP?! echo "err"
+ echo "err" ?!AMP?!
exit 1
-?!AMP?! fi
+ fi ?!AMP?!
foo
-?!AMP?! done
+ done ?!AMP?!
bar
>)
(
if test -n ""
then
-?!AMP?! echo very
+ echo very ?!AMP?!
echo empty
elif test -z ""
then
else
echo foo &&
cat
-?!AMP?! fi
+ fi ?!AMP?!
echo poodle
>) &&
(
(
foobar &&
-?!AMP?! barfoo
+ barfoo ?!AMP?!
flibble "not a # comment"
>) &&
then
while true
do
-?!AMP?! echo "pop"
+ echo "pop" ?!AMP?!
echo "glup"
-?!AMP?! done
+ done ?!AMP?!
foo
-?!AMP?! fi
+ fi ?!AMP?!
bar
>)
(
x="line 1 line 2 line 3" &&
-?!AMP?! y="line 1 line2"
+ y="line 1 line2" ?!AMP?!
foobar
>) &&
(
>> ) &&
(cd foo &&
bar
-?!AMP?!>> )
+>> ) ?!AMP?!
(
cd foo &&
>> bar) &&
(
cd foo &&
-?!AMP?!>> bar)
+>> bar) ?!AMP?!
(cd foo &&
>> bar) &&
(cd foo &&
-?!AMP?!>> bar)
+>> bar) ?!AMP?!
foobar
>)
(
cat &&
-?!AMP?! cat
+ cat ?!AMP?!
foobar
>)
# minor numbers of cows (or do they?)
baz &&
snaff
-?!AMP?!>> )
+>> ) ?!AMP?!
fuzzy
>)
bar |
baz &&
fish |
-?!AMP?! cow
+ cow ?!AMP?!
sunder
>)
(
-?!AMP?!?!SEMI?! cat foo ; echo bar
+?!SEMI?! cat foo ; echo bar ?!AMP?!
?!SEMI?! cat foo ; echo bar
>) &&
(
(
echo wobba gorgo snoot wafta snurb &&
-?!AMP?! cat >bip
+ cat >bip ?!AMP?!
echo >bop
>) &&
(
(foo || exit 1) &&
(foo || exit 1) |
(foo || exit 1) >baz &&
-?!AMP?! (foo && bar)
-?!AMP?!?!SEMI?! (foo && bar; baz)
+ (foo && bar) ?!AMP?!
+?!SEMI?! (foo && bar; baz) ?!AMP?!
foobar
>)
(
while true
do
-?!AMP?! echo foo
+ echo foo ?!AMP?!
cat
-?!AMP?! done
+ done ?!AMP?!
while true; do
echo foo &&
cat bar