当我尝试打印阵列的特定位置时,错误替换

时间:2018-03-27 08:16:47

标签: bash sh

我开始使用bash编程,我想打印一个特定的数组位置,但是当我尝试时我得到了这个错误:错误替换

#!/bin/sh
user=`cut -d ";" -f1 $ultimocsv | sort -d | uniq -c` 
arr=$(echo $user | tr " " "\n")
a=5
echo "${arr[$a]}"   #Error:bad substitution

为什么?

1 个答案:

答案 0 :(得分:0)

您正在使用不支持数组的“sh”。即使您使用“bash”也会得到相同的错误,因为“arr”不是数组。我不确定,如果“uniq”中的“-c”是你想要的。

我认为,这就是你要找的东西:

#!/bin/bash
mapfile -t arr < <( cut -d ";" -f1 $ultimocsv | sort -d | uniq )
a=5
echo "${arr[$a]}"

即使你的文件少于5个唯一行,这也不会给出错误,因为bash会为定义但空的数组返回一个空字符串。

它甚至可以与“uniq -c”一起使用,因为它将完整的行放在数组中。