コマンド置き換えが行われるとき、スクリプトを評価するために必要なあらゆる変数置き換えも行われます。同様に、変数置き換えが行われるとき、変数の値を検索するために必要なあらゆるコマンド置き換えも行います。残りを置き換えすることを防げ、substを使ってテキストを処理する際により多くの選択権をスクリプト作成者に与えます。{abc,[break],def}は”abc,,def”ではなく、”abc”を返します。1+2],def}は"abc,3,def"ではなく"abc,,def"を返します。他の例外のリターンコードは返された値を置き換え結果にします。1+2],def}は"abc,3,def"ではなく"abc,foo,def"を返します。1+2],def}も"abc,3,def"ではなく"abc,foo,def"を返します。