我试图创建一个存储了一些值的数组,但是我不知道该怎么做。我尝试了下面的代码,但它并没有起作用。
我的代码:
i=0
for c in colors; do
array[$i]=$c
echo {$c[$i]}
i=`expr $i + 1`
done
注意: "colors" 是一种类似于 "ps -ef" 命令的命令,返回一个值列表。例如,它具有 "blue,red,yellow" 值。
colors= 'ps -ef | grep colors'
您可以使用此脚本在循环中填充数组:
array=()
for c in $colors; do
array+=( "$c" )
done
array=( $(command) )
array=( $(ps -ef | grep ...) )
-- 但这是一个不好的做法,有几个原因。 - Charles Duffyarray=( $(command) )
时,每个元素都由空格或换行符分隔。因此,如果元素本身包含空格,则会被拆分为多个数组元素。有处理这种情况的方法;例如适当使用IFS
,就像Charles的答案中所述。 - anubhava如果你的颜色是一行一个,当你展开存储它们的未引用变量时,你可能会丢失信息(删除空格和换行之间的区别,扩展glob字符等)。
不要这样做。相反,请遵循BashFAQ #1:
colors=()
while IFS='' read -r color; do
colors+=( "$color" )
done < <(get-color-list)
read
可以为你进行列拆分,使其更易于赋值。
colors
列表的方式。如果它们一行一个被返回,那么有比字符串分割更可靠的方法来获取它们(就像你正在做的,也是你所接受的答案所做的,这将导致例如将颜色*
改变为当前目录中的文件列表,或将颜色light magenta
转换为两个条目,即light
和magenta
)。 - Charles Duffy(( ++i ))
是编写i=$(expr $i + 1)
的现代方式。 - Charles Duffy{$c[$i]}
而不是${c[$i]}
,以及in colors
而不是in $colors
。 - Charles Duffy