以下是我创建bash数组的方法:
while read line
do
myarr[$index]=$line
index=$(($index+1))
done < lines.txt
“lines.txt”文件是以下字符串
的组成部分hello big world!
how are you
where am I
创建${myarr[@]}
后,我可以轻松访问此阵列发布中的每个元素(行)
echo ${myarr[2]}
但是,如果我只想提取world!
怎么办?是否可以从world!
的0元素中提取myarr
?最重要的是,是否可以从myarr
元素中提取任何最后一个单词?
我知道在python中你可以做myarr[0][3]
这样就可以了,bash怎么样?
答案 0 :(得分:15)
这是众多方式之一
set ${myarr[2]}
echo $3
答案 1 :(得分:5)
您可以使用变量扩展中的修饰符从字符串中提取单词(这是数组元素所在的单词):#
(删除前缀),##
(删除前缀,贪婪),{{ 1}}(删除后缀)和%
(删除后缀,贪婪)。
%%
正如你所看到的,你可以在这里得到相当的幻想,但在某些时候@chepner建议把它变成一个数组变得容易了。此外,我建议用于提取第二个等词的公式有点脆弱:如果你使用我的公式提取只有两个单词的字符串的第三个单词,第一个修剪将失败,它将结束打印第一个(!)字而不是空白。另外,如果你连续有两个空格,这会将它视为一个零长度的单词,每一行都有一个空格......
BTW,在构建数组时我认为使用$ myarr=('hello big world!' 'how are you' 'where am I')
$ echo "${myarr[0]}" # Entire first element of the array
hello big world!
$ echo "${myarr[0]##* }" # To get the last word, remove prefix through the last space
world!
$ echo "${myarr[0]%% *}" # To get the first word, remove suffix starting with the first space
hello
$ tmp="${myarr[0]#* }" # The second word is harder; first remove through the first space...
$ echo "${tmp%% *}" # ...then get the first word of what remains
big
$ tmp="${myarr[0]#* * }" # The third word (which might not be the last)? remove through the second space...
$ echo "${tmp%% *}" # ...then the first word again
world!
而不是明确跟踪数组索引有点清晰:
+=(newelement)
答案 2 :(得分:1)
类似于stephen-penny's的答案,但没有覆盖shell /函数位置参数。
a=(${myarr[2]})
echo ${a[3]}
答案 3 :(得分:0)
使用索引从数组中打印特定元素:
echo ${my_array[2]}
要打印数组中的所有元素,请执行以下操作:
for i in "${my_array[@]}"
do
echo $i
done