bashが.*を現在のディレクトリの隠しファイルのリストに変換するのはなぜですか。

bashが.*を現在のディレクトリの隠しファイルのリストに変換するのはなぜですか。
# list=(`echo ".*"`)
# for item in ${list[@]}; do echo "$item"; done;
.
..
.DS_Store
.git
.gitignore
.tox
.toxrc

上記のコードでは、bashの配列に文字列を書き込もうとしていますが、そうすると、 " .*. *"は現在のディレクトリにあるファイル/ディレクトリの完全なリストに変換されます。 Bashがこれを行うのをどのように防ぐことができますか?

ベストアンサー1

list=(`echo ".*"`)

上記ではコマンド置換に引用符がないため、生成された出力には単語の区切りとワイルドカードが適用されます。

for item in ${list[@]}; do echo "$item"; done;

${list[@]}また、ここには引用符がないので再び、これは単語分割とワイルドカードの影響を受けます。 (作業に引用符を追加するか、一致するファイル名にスペースまたはワイルドカードが含まれている場合は重要です...)

リテラル文字列だけが必要な場合は、andを.*使用してください。コマンド置換を使用するには、周囲に引用符を入れます(例:)。list=(".*")for item in "${list[@]}"; ..."$(somecmd)"

また見なさい:

おすすめ記事