なぜ( ``)はリストを提供し、$()は1つの引数しか提供しないのですか?

なぜ( ``)はリストを提供し、$()は1つの引数しか提供しないのですか?

私は間違った言葉を使用した可能性がありますので、修正してください。私が持っているとしましょう:

lst=(`ls $1`)
echo $lst #this gives the first element of the list

しかし、私がこれをしようとすると:

lst=$(ls $1)
echo $lst #this gives me all the files under argument directory

答え1

まず、$1(最初のパラメータ)はなぜここにありますか?第二に、変数の内容ではなくecho lstとしてのみ作成してください。lstあなたはそれをしたくなければなりませんecho $lst

括弧で囲まれた割り当ては、次の使用時に最初のbash(1)要素として評価されるインデックスなしで配列を作成します。

lst=(1 2 3)
echo $lst       # prints 1
echo ${lst[0]}  # prints 1
echo ${lst[1]}  # prints 2
echo ${lst[*]}  # prints 1 2 3

答え2

最初の例

lst=(`ls $1`)

同じだろう

lst=( $(ls $1 ) )

そして両方ともbashで動作するようです。

答え3

バッシュから。

最初の例lst=(ls $ 1は、)var lstに値の配列を生成します。
このコードは次のように表示されます。

lst=(`ls .`); printf '%s\n' "${lst[@]}"

2番目の例はlst=$(ls $1)実行されますが、ls $1出力(1つの長い文字列で連結されている)だけがvarに割り当てられますlst

おそらくあなたが比較したいものは次のとおりです。

lst=( `ls $1`)
lst=($(ls $1))

そして実際に`...`は同じです$(...)

どちらのコマンドも値の配列を生成します。lst

関連情報