バックスラッシュ、コマンドまた変数の置き換えを行います。置き換えはTclのコマンドとちょうど同じ方法で行なわれます。引数は実際2回置き換えられます。コマンドによってもう一度置き換えられます。-nobackslashes、-nocommandsまたは-novariablesのうちのいずれかが指定されると、対応する置き換えは行われません。-nocommandsが指定された場合、コマンド置き換えは遂行されません。特別の説明がなければ普通の文字として扱われます。1種類の置き換えが別の種類の置き換えを含むことができることにご注目ください。コマンド置き換えは制限なしで行われます。これはコマンド置き換えを完成するために必要なあらゆる変数置き換えが依然、行われることを意味します。同様に、-nocommandsが指定されても、変数置き換えを完成するために必要なあらゆるコマンド置き換えは行われます。下のセクションの例を参照してください。エラーが置き換え中に発生すれば、substはそのエラーを返します。例外を引き起こした置き換えが開始するまでに置き換えられた結果文字列になります。)の結果は、空の文字列になります。