如何使用数组索引获取元素

时间:2013-12-10 08:57:51

标签: bash shell

我有一个名为test的数组,其中包含以下内容:

a b c d e f. 

我从字符串中得到了这些数组:

a/b/c/d/e/f

我使用以下内容将上面的字符串拆分为数组:

test=$(echo $dUrl | tr "/" "\n")

现在我想使用test得到${test[1]}的第一个元素,但它没有给我任何东西。

我犯了错误。

3 个答案:

答案 0 :(得分:2)

test不是数组,而是脚本中的多行字符串,获取元素的一种方法(例如第二种)将是:

echo "$test" | sed -n '2p'

如果要构建真实数组,可以使用该语法:

typeset -a test=( $(echo $dUrl|tr "/" " ") )

然后,${test[2]}会显示你想要的第二个元素。

答案 1 :(得分:2)

仅限Bash 解决方案是使用word splittingIFS

var="a/b/c/d/e/f"
IFS=/; # redefine word-splitting on slash character
arr=( $var ) # use word-splitting :)

更好的选择

使用read built-in更安全:

var="a/b/c/d/e"
IFS=/ read -rd '' -a arr <<<"$var"
  • -r:禁用读取数据中反斜杠转义和行继续的解释;
  • -a <ARRAY>:存储在<ARRAY>中,将数据逐字地读入指定数组而不是正常变量;
  • -d <DELIM>:将<DELIM>视为数据结束,而不是<newline>

测试

echo "${arr[0]}" # → a
echo "${arr[1]}" # → b
echo "${arr[2]}" # → c

答案 2 :(得分:0)

在索引之前,您必须将字符串转换为数组。

arr=($test)
echo ${arr[2]}

根据您的问题

$ dUrl="a/b/c/d/e/f"
$ test=$(echo $dUrl | tr "/" "\n")
$ echo $test
a b c d e f
$ a=($test)
$ echo ${a[1]}
b