Linux Bash脚本:在for循环中填充数组
我尝试创建一个填充了一些值的数组。但我不知道怎么做。我试过下面的东西,但没用 我的代码:Linux Bash脚本:在for循环中填充数组,linux,bash,Linux,Bash,我尝试创建一个填充了一些值的数组。但我不知道怎么做。我试过下面的东西,但没用 我的代码: i=0 for c in colors; do array[$i]=$c echo {$c[$i]} i=`expr $i + 1` done 注意:“colors”是一种返回值列表的“ps-ef”命令。例如,它有“蓝、红、黄”值 colors= 'ps -ef | grep colors' 可以使用此脚本在循环中填充数组: array=() for c in $colors; do array
i=0
for c in colors; do
array[$i]=$c
echo {$c[$i]}
i=`expr $i + 1`
done
注意:“colors”是一种返回值列表的“ps-ef”命令。例如,它有“蓝、红、黄”值
colors= 'ps -ef | grep colors'
可以使用此脚本在循环中填充数组:
array=()
for c in $colors; do
array+=( "$c" )
done
或者更简单:
array=( $(command) )
如果颜色是一对一的,那么一旦展开存储颜色的变量,就有可能丢失信息(删除空格和换行符之间的区别、展开全局字符等) 不要那样做。相反,请遵循:
colors=()
而IFS=''read-r color;做
颜色+=(“$color”)
完成<如何返回颜色
列表非常重要。如果它们是一对一返回的,那么有比字符串拆分更可靠的方法将它们取出(这就是你正在做的,也是你被接受的答案所做的,它将改变,例如,一个颜色*
为当前目录中的文件列表,或者一个颜色浅品红色
为两个条目,浅品红色
和品红色
)。顺便说一句,在bash中,(++i))
是编写i=$(expr$i+1)
的现代方式,而代码中唯一完全不起作用的东西(与违反最佳实践相反)是编写{$c[$i]}
而不是${c[$i]}
和的颜色
而不是$colors中的同样,作为文档,您应该更喜欢pgrep
命令,而不是将ps
的输出变灰。如果我们假设字符串拆分是给定的,那么是的。如果输入是一对一行的,最好的做法是使用while/read循环拆分元素——这样我们就不会有全局扩展、基于IFS的拆分或其他类似的副作用。您的“simpler”命令有没有一个例子?它是否像“array=($($)”(((($)((ps-ef | grep pmon”))”?@AloneInTheDark,没有引号;只是array=($(ps-ef | grep…)
--但这是一种不好的做法,有几个原因。@AloneInTheDark:当您使用数组=($(命令))时
然后每个元素都用空格或新行分隔。因此,如果元素本身包含空格,则会将其分解为多个数组元素。有几种方法可以处理此问题;例如,在Charles的回答中适当地使用IFS
。
colors=()
while IFS='' read -r color; do
colors+=( "$color" )
done < <(get-color-list)