(*)
これらとそしての違いは何ですか("$(ls)")
?
区切り文字を除いて、本質的に同じですか?
答え1
1つ目は、(*)
現在のディレクトリのファイルとディレクトリのリストをワイルドカードとして指定し、リストを作成します。このリストを配列変数に割り当てることができ、各ファイル名は独自のエントリになります。
touch 'a b' c
d=(*)
printf "> %s <\n" "${d[@]}"
> a b <
> c <
2番目のエントリは、現在のディレクトリを一覧表示するために(“$(ls)”)
呼び出されます。ls
ファイルとディレクトリの結果リストは単一の文字列に保存され、リストに割り当てられます。リストには、改行で区切られた名前のセットで構成される単一の要素が含まれています。
d=("$(ls)")
printf "> %s <\n" "${d[@]}"
> a b
c <
ファイル名がリスト内の個々の要素に正しく公開され、解析された出力がしばしばls
予期しない複雑さでいっぱいになるため、最初の方が良いでしょう。