「あまりにも多くの引数」が発生するのはなぜですか?

「あまりにも多くの引数」が発生するのはなぜですか?

これは、3行目にパラメータが多すぎるというスクリプトの一部です。

#!/bin/bash
export LC_ALL='C'
if [ `echo "*file 2" | grep -o ^.` = '.' ]
then
    echo success
fi

理由を知っている人はいますか?私が知っている限り、私は2つのパラメータ「*」と「.」を比較しています。

答え1

echo "*file 2" | grep -o ^.印刷*

二重引用符の外側にコマンド置換があるため、ワイルドカード(別名ワイルドカード一致、別名ファイル名生成)とトークン化が行われます。現在のディレクトリが空でない場合は、*現在のディレクトリのファイルのリストに展開されます。各ファイルは[コマンド内のトークンになり、これは構文エラーである可能性が高いです。

問題は、コマンドの置き換えに二重引用符を使用しないことです。変数とコマンドの置換には常に二重引用符を使用してください。それらを無視する妥当な理由がなければ。

if [ "$(echo "*file 2" | grep -o ^.)" = '.' ]

バラよりスペースやその他の特殊文字が原因でシェルスクリプトが停止するのはなぜですか?より詳細な説明が必要です。

関連情報