如何在循环的每次迭代中在Bash中向数组添加元素?

时间:2016-04-05 23:50:49

标签: arrays bash

我的depends中有$PATH个文件:

#!/bin/bash
k=0
for i in "$@"
do
  DP[k]="nodejs-$i"
  k=$((k+1))
done

echo $DP

我跑depends js kd并返回:

nodejs-js

这令我感到惊讶,因为我认为我得到的结果将是:

nodejs-js nodejs-kd

因为循环是为了向DP形式的nodejs-$i数组添加新元素,其中$i是我在运行时提供给depends脚本的输入它。我尝试过使用这个依赖脚本:

#!/bin/bash
DP=()
for i in "$@"
do
  DP+=("nodejs-$i")
done

echo $DP

但它返回了完全相同的结果,js kd输入(即输出为nodejs-js)。

2 个答案:

答案 0 :(得分:3)

您的脚本正确地将元素添加到数组中,检查如何读取下面的DP数组。

尝试一下:

#!/bin/bash
k=0
for i
do
  DP[k]="nodejs-$i"
  k=$((k+1))
done

printf "DP array size is %d\n" "${#DP[@]}"
printf "%s " "${DP[@]}"
printf "\n"

- 编辑 - 请注意,鼓励新应用程序使用printf而不是echo。

有趣=> 默认情况下, for 语句会循环播放脚本的参数。

测试:

$ ./depends js kd
DP array size is 2
nodejs-js nodejs-kd

答案 1 :(得分:1)

问题在于Bash会将$DP视为${DP[0]}。你需要

echo "${DP[@]}"