Statt mit `\let` und Umschaufeln der Definition in eine interne Anweisung zu hantieren, empfehle ich die Verwendung des Paket [`xpatch`](http://www.ctan.org/pkg/xpatch) zur Erweiterung der Definition von `LinearSystems` und `LinearSystems*`:
\documentclass{article}
\usepackage{amsmath}
\usepackage{environ}
\usepackage{xpatch}
\makeatletter
\newcommand{\LinearSystems@SetupLets}{%
\let\col=&%
\let\+=+%
\let\-=-%
\let\===%
}
\newcommand{\LinearSystems@SetupCatcodes}{%
\catcode`\&=\active
\catcode`\+=\active
\catcode`\-=\active
\catcode`\==\active
}
\newcommand{\LinearSystems@Setup}{}
\begingroup
\LinearSystems@SetupCatcodes
\gdef\LinearSystems@Setup{%
\LinearSystems@SetupLets
\LinearSystems@SetupCatcodes
\newcommand&[1][0pt]{\col\hspace{##1}\col}%
\def+{\col\+{}{}\col}%
\def-{\col\-{}{}\col}%
\def={\col\={}{}\col}%
}
\endgroup
\NewEnviron{LinearSystems}[1]{\begin{alignat}{#1}\BODY\end{alignat}}
\NewEnviron{LinearSystems*}[1]{\begin{alignat*}{#1}\BODY\end{alignat*}}
\usepackage{xpatch}
\xpretocmd{\LinearSystems}{\LinearSystems@Setup}{}{}
\expandafter\xpretocmd\csname LinearSystems*\endcsname{\LinearSystems@Setup}{}{}
\makeatother
\begin{document}
\begin{LinearSystems}{3}
4x_1 + x_2 = 1\\
\-x_1 + x_2 = \-2
\end{LinearSystems}
\begin{LinearSystems*}{3}
4x_1 + x_2 = 1\\
\-x_1 + x_2 = \-2
\end{LinearSystems*}
\end{document}
Das ist nicht nur einfacher, sondern auch sicherer. Wer will kann im letzten Argument von `\xpretocmd` noch eine Fehlerbehandlung für den Fall einfügen, dass das Patchen aus irgendwelchen Gründen nicht funktioniert.