Shell打印命令返回的数组只显示第一个元素
Shell打印命令返回的数组
有时候,我们需要获取Shell命令返回的数组以进行遍历,但如果使用不当,获取到的数组将只有第一个元素,这将导致很多数据丢失,以至结果错误
1、问题提出
假设,当前tmp/
目录结构如下:
tmp/
bak/
py/
sh/
例如,在当前tmp/
目录下执行:
arr=($(ls)); echo $arr
arr=($(ls)); echo "$arr"
上述命令的输出结果为bak
,此时将丢失py
和sh
再例如,在当前tmp/
目录下执行:
arr=(`find ./ -maxdepth 1 -type d`); echo $arr
arr=(`find ./ -maxdepth 1 -type d`); echo "$arr"
上述命令的输出结果为./
,此时将丢失./sh
、./py
和./bak
这都会导致结果错误
2、问题解决
解决的办法也很简单,只需要给返回数组的命令添加双引号即可。例如
arr=("$(ls)"); echo $arr
该命令的输出结果为:
bak py sh
请注意,以下命令的输出结果将按行显示:
arr=("$(ls)"); echo "$arr"
bak
py
sh
同样的,上面find
命令也需要添加双引号:
arr=("`find ./ -maxdepth 1 -type d`"); echo $arr
输出结果为:
./ ./sh ./py ./bak
同理,以下命令的输出结果将按行显示:
arr=("`find ./ -maxdepth 1 -type d`"); echo "$arr"
./
./sh
./py
./bak