Bash 脚本:在 for 循环中填充数组

Alo*_*ark 3 linux bash

我尝试创建一个填充了一些值的数组。但我不知道该怎么做。我在下面尝试了一些东西,但没有用。

我的代码:

i=0
for c in colors; do
array[$i]=$c
echo {$c[$i]}
i=`expr $i + 1`
done
Run Code Online (Sandbox Code Playgroud)

注意: “colors”是某种返回值列表的“ps -ef”命令。例如,它具有“蓝色、红色、黄色”值。

colors= 'ps -ef | grep colors'
Run Code Online (Sandbox Code Playgroud)

anu*_*ava 5

您可以使用此脚本在循环中填充数组:

array=()
for c in $colors; do
    array+=( "$c" )
done
Run Code Online (Sandbox Code Playgroud)

或者更简单:

array=( $(command) )
Run Code Online (Sandbox Code Playgroud)

  • @AloneInTheDark,没有引号;只是`array=( $(ps -ef | grep ...) )` -- 但出于多种原因,这是一种不好的做法。 (2认同)

Cha*_*ffy 5

如果您的颜色是一对一排列的,那么一旦您展开存储不带引号的变量,您就可能会丢失信息(放弃空格和换行符之间的区别、展开全局字符等)。

不要那样做。相反,请遵循BashFAQ #1

colors=()
while IFS='' read -r color; do
    colors+=( "$color" )
done < <(get-color-list)
Run Code Online (Sandbox Code Playgroud)

如果您只想要每行中的特定列,则更是如此;read将为您进行列分割,使其更容易分配。