我有一个名为test
的数组,其中包含以下内容:
a b c d e f.
我从字符串中得到了这些数组:
a/b/c/d/e/f
我使用以下内容将上面的字符串拆分为数组:
test=$(echo $dUrl | tr "/" "\n")
现在我想使用test
得到${test[1]}
的第一个元素,但它没有给我任何东西。
我犯了错误。
答案 0 :(得分:2)
test
不是数组,而是脚本中的多行字符串,获取元素的一种方法(例如第二种)将是:
echo "$test" | sed -n '2p'
如果要构建真实数组,可以使用该语法:
typeset -a test=( $(echo $dUrl|tr "/" " ") )
然后,${test[2]}
会显示你想要的第二个元素。
答案 1 :(得分:2)
仅限Bash 解决方案是使用word splitting和IFS。
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