为什么 (` `) 给出一个列表而 $() 只给出一个参数

为什么 (` `) 给出一个列表而 $() 只给出一个参数

我可能用词不当,请编辑。假设我有:

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

在bash中。

第一个示例lst=(ls $1)在 var lst 中创建一个值数组。
正如这段代码将显示的:

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

第二个示例lst=$(ls $1)执行ls $1,但仅将输出(连接为一个长字符串)分配给 var lst

也许您想要比较的是:

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

并且确实`...`完全等同于$(...).

这两个命令都会创建一个值数组lst

相关内容