Bashスクリプトで角かっこなどの特殊文字を処理する方法は?

Bashスクリプトで角かっこなどの特殊文字を処理する方法は?

一部のプログラムの出力を取得して変数に割り当てようとしています。これを行うにはバックティックを使用しますが、必要に応じて他の方法に切り替えることができます。私はしばしば私の変数から期待した結果が得られないことを発見しました。以下は簡単なケースです。私の実際の例はもっと複雑です。バックティックで実行するプログラムの出力が何であれ、私はそれを変数にしたいと思います。それは可能ですか?

test=`echo [asdf]`

もし私がecho $test一つだけ見せたら。

答え1

  1. バックティックを使用しないでください、使用$()
  2. リテラル文字列の周りに一重引用符を使用し、二重変数の周りだからecho "$test"
  3. 使用しないでくださいecho、使用printf

結局:

    $ test="$(printf '%s' '[asdf]')"
    $ printf "%s\n" "$test"
    [asdf]

答え2

[最も簡単な答えは、特殊なパターン文字で処理されないようにエスケープすることです。 (]引用符が前に表示されない場合は、閉じるステートメントは文字通り処理されます[。)

test=$(echo \[asdf])

関連情報