There is an outstanding issue in Vim's shell syntax file. A patch was made that broke syntax that used almost any changes. I originally made my own patch that worked for the most part, but in heavily neasted commands it broke down. In the mailing list the following change was proposed. I am supplying this diff for my own sanity so when my syntax file gets reset and is still broken I can apply the diff :)
diff --git a/runtime/syntax/sh.vim b/runtime/syntax/sh.vim index 13d74dbc1..42151f41b 100644 --- a/runtime/syntax/sh.vim +++ b/runtime/syntax/sh.vim @@ -335,7 +335,7 @@ syn match shEscape contained '\%(^\)\@!\%(\\\\\)*\\.' nextgroup=shComment " systems too, however, so the following syntax will flag $(..) as " an Error under /bin/sh. By consensus of vimdev'ers! if exists("b:is_kornshell") || exists("b:is_bash") || exists("b:is_posix") - syn region shCommandSub matchgroup=shCmdSubRegion start="\$(\ze[^(]\|$" skip='\\\\\|\\.' end=")" contains=@shCommandSubList + syn region shCommandSub matchgroup=shCmdSubRegion start="\$(\ze[^(]\?" skip='\\\\\|\\.' end=")" contains=@shCommandSubList syn region shArithmetic matchgroup=shArithRegion start="\$((" skip='\\\\\|\\.' end="))" contains=@shArithList syn region shArithmetic matchgroup=shArithRegion start="\$\[" skip='\\\\\|\\.' end="\]" contains=@shArithList syn match shSkipInitWS contained "^\s\+"