我可能用词不当,请编辑。假设我有:
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